скорость вывода php mysql в случайном порядке

#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() .