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

Връщане на произволни резултати (подреждане по rand())

Причината, поради която подреждането по RAND() може да бъде бавен е, че принуждавате базата данни действително да сортира цялата таблица, преди да върне нещо. Само намаляването на натоварването до едно сканиране на таблица е много по-бързо (макар и малко бавно).

Това означава, че можете да получите част от пътя, само като избегнете поръчката:

  SELECT *
    FROM my_table
   WHERE RAND() < 0.1
ORDER BY RAND()
   LIMIT 100

Това ще избере приблизително 1% от всички редове в таблицата, ще ги сортира и ще върне първите 100. Само имайте предвид, че основният проблем тук (както и с отговора на @cmd) е, че не можете да сте сигурни, че заявката се връща изобщо всичко.

Подходът по-горе трябва да включва сканиране на цяла таблица (за да се реши кои редове да се използват), последвано от приблизително 1% от редовете. Ако имате много редове, можете съответно да намалите процента.



  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 с помощта на седмица №

  2. Как да управлявате MySQL бази данни, потребители и таблици от командния ред

  3. Преместване на възел в дървото на вложените набори

  4. Няма такъв файл или директория или Не е известен такъв хост при изпълнение на миграции

  5. php / Mysql най-добрата дървовидна структура