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

MySQL заявка с ограничение и голямо изместване отнема завинаги

LIMIT с изместване е изключително бавен в повечето бази данни (открих някои документация в този смисъл за MySQL и се опитвам да намеря наистина добра статия, която прочетох преди време, обясняваща това за SQLite). Причината е, че обикновено се изпълнява нещо подобно:

  1. Извършвайте нормално планиране на заявки като LIMIT клауза не беше там
  2. Разходете се през резултатите, докато стигнем до индекса, който искате
  3. Започнете да извеждате резултати

Какво означава това, ако направите LIMIT 10000, 10 , ще се интерпретира като:

  1. Извлечете първите 10 000 резултата и ги игнорирайте
  2. Дайте ви следващите 10 резултата

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

Най-ефективният начин за справяне с пагинацията, за който знам, е да следя последния индекс, така че ако една страница завършва на id = 5 , след което направете своя следващ връзката има WHERE id > 5LIMIT x разбира се).

РЕДАКТИРАНЕ:Намерих статията за SQLite . Силно ви препоръчвам да прочетете това, тъй като обяснява правилния начин™ да правите неща в SQL. Тъй като хората от SQLite са наистина умни и други бази данни имат същия проблем, предполагам, че MySQL прилага това по подобен начин.




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

  2. Как да използвам правилно PHP за кодиране на MySQL обект в JSON?

  3. PHP mysql_connect() грешка в командния ред

  4. MySQL дял на таблицата по месеци

  5. Съображения за DevOps за внедряване на готови за производство бази данни