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

MySQL индекс забавя заявката

Изглежда, че article_id е първичният ключ за таблицата със статии.

Тъй като групирате по article_id, MySQL трябва да върне записите в ред по тази колона, за да изпълни GROUP BY.

Можете да видите, че без индекса, той сканира всички записи в таблицата със статии, но те са най-малко в ред по article_id, така че не се изисква по-късно сортиране. Оптимизацията LIMIT може да се приложи тук, тъй като вече е наред, може просто да спре, след като получи пет реда.

В заявката с индекса на tag.name, вместо да сканира цялата таблица със статии, той използва индекса, но срещу таблицата с етикети, и започва там. За съжаление, когато правите това, по-късно записите трябва да бъдат сортирани по article.article_id, за да се завърши клаузата GROUP BY. Оптимизацията LIMIT не може да се приложи, тъй като тя трябва да върне целия набор от резултати, след което да го подреди, за да получите първите 5 реда.

В този случай MySQL просто отгатва погрешно.

Без клаузата LIMIT предполагам, че използването на индекса е по-бързо, което може би е това, което 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. Изчислете разстоянието с 2 точки, географска ширина и дължина

  2. Конфигурирайте пощенския сървър за работа с PHP

  3. MySQL заявките са бързи, когато се изпълняват директно, но наистина бавни, когато се изпълняват като съхранена процедура

  4. UTF8 работен поток PHP, обобщен MySQL

  5. Как да промените директория с данни MySQL/MariaDB по подразбиране в Linux