Mysql
 sql >> база данни >  >> RDS >> Mysql

Добра идея/Лоша идея? Използване на MySQL RAND() извън малък набор от резултати от подзаявка?

Всъщност... в крайна сметка направих тест и може би сам си отговорих на въпроса. Реших да публикувам тази информация тук, в случай че е полезна за някой друг. (Ако съм направил нещо нередно тук, моля, уведомете ме!)

Това е някак изненадващо...

Противно на всичко, което прочетох, създадох таблица, наречена TestData с 1 милион реда и изпълних следната заявка:

ИЗБЕРЕТЕ * ОТ TestData WHERE номер =41 ПОРЪЧАЙТЕ ПО RAND() LIMIT 8

...и връща редовете средно за 0,0070 секунди. Наистина не разбирам защо RAND() има толкова лоша репутация. Струва ми се доста използваемо, поне в тази конкретна ситуация.

Имам три колони в моята таблица:

id [BIGINT(20)] | текстово поле [малък текст] | номер [BIGINT(20)]

Първичен ключ на идентификатор, индекс на номер.

Предполагам, че MySQL е достатъчно умен, за да знае, че трябва да прилага само RAND() към 20-те реда, които се връщат от "WHERE number =41"? (Специално добавих само 20 реда, които имаха стойност 41 за „число“.)

Алтернативният метод на подзаявка връща резултати със средно време от около .0080 секунди, което е по-бавно от метода без подзаявка.

Метод на подзаявка:SELECT * FROM (SELECT * FROM TestData WHERE номер =41) като t ORDER BY RAND() LIMIT 8



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL InnoDB Cluster 8.0 - Пълна разходка за внедряване:Част първа

  2. Emacs и MySQL на Mac

  3. Поддържа транзакции, заключване на ниво ред и външни ключове

  4. java.net.SocketException:Счупена тръба

  5. MySql FLOAT тип данни и проблеми с повече от 7 цифрен мащаб