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

Най-бърз произволен избор WHERE колона X е Y (NULL)

Получаването на наистина произволен запис може да бъде бавно. Няма много заобикаляне на този факт; ако искате да е наистина произволно, тогава заявката трябва да зареди всички подходящи данни, за да знае от кои записи трябва да избира.

За щастие обаче има по-бързи начини да го направите. Те не са правилно произволни, но ако сте щастливи да размените малко чиста произволност за скорост, тогава трябва да са достатъчно добри за повечето цели.

Имайки предвид това, най-бързият начин да получите "произволен" запис е да добавите допълнителна колона към вашата DB, която се попълва с произволна стойност. Може би осолен MD5 хеш на първичния ключ? Както и да е. Добавете подходящи индекси към тази колона и след това просто добавете колоната към вашия ORDER BY клауза в заявката и ще получите вашите записи обратно в произволен ред.

За да получите един произволен запис, просто посочете LIMIT 1 и добавете WHERE random_field > $random_value където произволна стойност ще бъде стойност в обхвата на новото ви поле (да речем MD5 хеш на произволно число, например).

Разбира се, лошата страна тук е, че въпреки че вашите записи ще бъдат в произволен ред, те ще бъдат залепени в същия произволен ред. Наистина казах, че се търгува съвършенство за скорост на заявката. Можете да заобиколите това, като ги актуализирате периодично с нови стойности, но предполагам, че това може да е проблем за вас, ако трябва да го поддържате свежи.

Другият недостатък е, че добавянето на допълнителна колона може да е твърде тежко, за да се пита дали имате ограничения за съхранение и вашата DB вече е огромна по размер или ако имате строг DBA, който трябва да преминете, преди да можете да добавяте колони. Но отново трябва да размените нещо; ако искате скоростта на заявката, имате нужда от тази допълнителна колона.

Както и да е, надявам се, че това помогна.



  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 DATETIME DIFF заявка

  2. Какви са предимствата на UPDATE LOW_PRIORITY и INSERT DELAYED IN?

  3. Проста IF.. Друго.. mysql заявка

  4. MySQL:Увеличаване на GROUP_CONCAT_MAX_LEN параметър - някакви опасности?

  5. Как да направите броене на заявка за съюз