Opened 20 months ago

Last modified 20 months ago

#18836 new enhancement

ORDER BY RAND() is slow — at Initial Version

Reported by: scribu Owned by:
Priority: normal Milestone: Awaiting Review
Component: Performance Version:
Severity: minor Keywords:
Cc: sirzooro

Description

WP_Query currently accepts 'orderby' => 'rand' which translates to ORDER BY RAND().

This is very slow when you have many posts, since it effectively calls RAND() for each row.

A faster way would be to call RAND() only once and put it in the LIMIT clause.

The only thing is that we have to make sure that the generated number is smaller than (total number of posts - number of posts to fetch).

So, this would require to do an extra query to calculate the total. It should still be faster than the current method.

If we want to get all the posts, we can get them in any order and then randomise their order using shuffle() in PHP.

Change History (0)

Note: See TracTickets for help on using tickets.