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

Кога функцията MySQL ПОРЪЧВА ПО RAND()?

Прав сте, той ще приложи ORDER BY след намаляване на броя на редовете с WHERE, GROUP BY и HAVING. Но ще се приложи ORDER BY преди LIMIT.

Така че, ако филтрирате достатъчно броя на редовете надолу, тогава да, ORDER BY RAND() може да постигне това, което искате, без голямо въздействие върху производителността. Има законна полза от кода, който е прост и лесно четим.

Проблемът идва, когато мислите вашата заявка трябва да намали редовете до нещо малко, но с течение на времето, когато данните ви нарастват, броят на редовете, които трябва да сортира, отново става голям. Тъй като вашата заявка прави LIMIT 10 за сортирания резултат, скрива факта, че изпълнявате ORDER BY RAND() на 500k реда. Просто виждате, че изпълнението мистериозно се влошава.

Писах за алтернативни методи за избиране на произволен ред в книгата си SQL Antipatterns:Избягване на Подводни камъни при програмирането на бази данни , или в други отговори тук в Stack Overflow:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Конкатенация на поле, свързано с множество реда от запис в набор от заявки в Django

  2. MySQL:Възможно ли е да се "запълни" SELECT със стойности без таблица?

  3. Разликата между 'AND' и '&&' в SQL

  4. Използване на набор от резултати SELECT за изпълнение на заявка UPDATE с MySQL Stored Procedures

  5. Добър урок за това как да актуализирате вашата Mysql база данни с PHP формуляр?