[Sanity Check] Run query once per search #207
Merged
+6
−14
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Not urgent, but if I'm on the right track, we can improve search performance by a fair bit.
It looks like controllers/catalog/Search.php is running each search query twice: once for the items on the current page, and then again to count the total number of matches for the search. There doesn't seem to be a clean way to count the total results, but here's one way.
We can't use a regular
COUNT(*)
, because that will stop at ourLIMIT
of 25. So: theOVER()
call (1, 2) lets usCOUNT
before we discard the other results.But: doing this on each of our
UNION
sets will give different results, which we'd need to add together selectively. Collecting them all in a sub-query (WITH results AS (
) gives us a combined set to count.I don't know how much of a hack this is, and how much overhead it adds, but it at least seems much faster than running the entire search query twice.