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

Как работи ORDER BY RAND() на MySQL?

Въпреки че няма такова нещо като „бърза поръчка чрез rand()“, има заобиколно решение за вашата конкретна задача.

За получаване на произволен произволен ред , можете да направите като този немски блогър:http://web.archive.org/web/20200211210404/http://www.roberthartung.de/mysql-order-by-rand-a- case-study-of-alternatives/ (Не можах да видя URL адрес на гореща връзка. Ако някой види такъв, не се колебайте да редактира връзката.)

Текстът е на немски, но SQL кодът е малко по-надолу в страницата и в големи бели полета, така че не е трудно да се види.

Основно това, което той прави, е да направи процедура, която върши работата за получаване на валиден ред. Това генерира произволно число между 0 и max_id, опитайте да извлечете ред и ако не съществува, продължете, докато не уцелите такъв, който съществува. Той позволява извличане на x брой произволни редове, като ги съхранява във временна таблица, така че вероятно можете да пренапишете процедурата, за да бъде малко по-бърза, извличайки само един ред.

Недостатъкът на това е, че ако изтриете МНОГО редове и има огромни пропуски, шансовете са големи да пропусне много пъти, което ще го направи неефективен.

Актуализация:Различни времена за изпълнение

Може да е свързано с индексиране. id е индексиран и бърз за достъп, докато добавянето на username към резултата, означава, че трябва да прочете това от всеки ред и да го постави в таблицата с памет. С * той също трябва да прочете всичко в паметта, но не е необходимо да прескача из файла с данни, което означава, че няма загубено време в търсене.

Това има значение само ако има колони с променлива дължина (varchar/text), което означава, че трябва да провери дължината, след което да пропусне тази дължина, вместо просто да прескочи зададена дължина (или 0) между всеки ред.



  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 база данни прави падащо меню с помощта на данни, които вече са въведени в html/php

  3. mysql брои само за различни стойности в обединена заявка

  4. Прилага ли се ограничението за максималния брой таблици за SQL присъединяване към цялата заявка или подзаявките се отчитат отделно?

  5. Грешка при инсталиране на Sphinx 2.0.4 с MAMP 2.0:Не мога да намеря MySQL заглавки