Most "I optimised it and it's faster now" claims in Laravel projects rest on one refresh of a page in a local browser. That is not a measurement; it is an anecdote. Before you add an index, rewrite a query, or argue for a cache layer, you need a reproducible Laravel query benchmark : the same data, the same conditions, enough runs to see past noise, and a clear separation between time spent in MySQL and time spent in PHP.
This article is the protocol I use, along with the results of applying it to a one-million-row table while writing this series. One of those results was a trap I walked into myself, which is exactly why the protocol has the steps it has.
Step 1: Freeze the question before you measure
A benchmark answers one question.…