#php #mysql
#php #mysql
Вопрос:
У меня есть запрос mysql, который возвращает 20 результатов из таблицы 110 000 000. Я хотел бы перетасовать их, прежде чем повторять их с помощью php.
Это быстрее в использовании
ORDER RAND()
или
как-то перетасовать массив в php?
Комментарии:
1. Попробуйте и увидите: php.net/microtime#example-629
2. Вы хотите перетасовать все 11 миллионов результатов и выбрать 20 случайных результатов из набора из 11 миллионов, или вы хотите выбрать предсказуемый набор из 20 результатов, а затем перетасовать их?
3. @Frank: выберите предсказуемые 20, затем перетасуйте их.
4. Тогда я бы просто перетасовал их в PHP. Производительность в наихудшем случае для ORDER С ПОМОЩЬЮ RAND() очень низкая, что отражается во многих результатах поиска Google: google.com/search?q=»order by rand» . Я ожидаю, что вы могли бы в этой ситуации предложить разумный порядок с помощью RAND, но я бы не стал утруждать себя — в этой ситуации это так же легко сделать
shuffle()
на PHP.
Ответ №1:
В зависимости от количества результатов, которые вы извлекаете из MySQL, ORDER BY RAND()
будет быстрее.
Если вы возвращаете только 20, как вы говорите, разница в производительности будет незначительной.
Вы всегда можете протестировать это и посмотреть, что для вас лучше, перетасовать массив в PHP, который вы бы использовали shuffle()
.