Когда sqlite просят сделать order by random(), он берет каждую строку в таблице (если иное не диктуется where), ставит ей в соответствие некое случайное значение, сортирует их все и обрезает limit'ом, если он есть. Никакие индексы при этом, конечно же, не используются. Нагенерить айдишников прямо в коде и использовать where id in () - дешевле. Даже если в айдишниках дырки. До сих пор не уверен до конца, сделало ли это знание меня счастливее.

2015-2016 Mokum.place