Learn how to drastically improve the performance of your Laravel applications by pushing more work to the database, all while still using the Eloquent ORM.
Performance issues suck. Customers are frustrated. Your servers are overloaded. Management is breathing down your neck.
You've already solved all your N+1 issues, added the necessary indexes, and you're even paying for the most expensive database server available. But despite all this, some things just feel impossible to build in a performant way.
We can't paginate results in the database because they depend on authorization checks that happen in Laravel.
We have to do some really complicated calculations on large data sets, which seems impossible without a real programming language like PHP.
We can't sort results in the database, because we have to sort by values computed in our application.
I've been there and it sucks. So one day I decided “that's it, I'm going to figure out how to push all this work to the database if it kills me.” The results blew my mind.
By leveraging advanced database techniques, like sub queries, conditional aggregates, and aggressive use of scopes, pages that took 30+ seconds to load were now loading within 500ms!!
I've since spoken about Eloquent and database performance at both Laracon Online and Laracon US, and have written in-depth articles on the topic.
What you’ll learn
- The three key metrics to better database performance
- The incredible power of sub queries
- When to use joins vs sub queries
- Using sub queries to select related data
- Using sub queries to build dynamic relationships
- Using sub queries to order by related data
- Calculating totals using conditional aggregates
- Running authorization policies in the database
- Building complex search filters
- Extending the query builder using macros
- Demystifying database indexes
- Introducing complex queries without sacrificing Eloquent's API
- Leveraging vendor-specific (MySQL, Postgres, etc.) features
- Caching and database denormalization
- How to safely write raw database queries
- Configuring Laravel to make N+1 issues impossible
- Extending Eloquent to support ordering with NULLS LAST and NULLS FIRST
- Getting the distance between two geographic points
- Filtering by geographic distance
- Ordering by geographic distance
- Querying records within a physical area using geospatial shapes