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

MySQL използва различен индекс в зависимост от граничната стойност със заявка ORDER BY

Така вървят нещата. Изчакайте малко...

Оптимизаторът би искал да използва ИНДЕКС, в този случай ACTI_DATE_I. Но не иска да го използва, ако това би било по-бавно.

План А:Използвайте индекса.

  1. Достигнете до структурирания индекс BTree в края (заради DESC)
  2. Сканиране назад
  3. За всеки ред в индекса потърсете съответния ред в данните. Забележка:Индексът има (ACTIVITY_DATE, ACTIVITY_ID), защото ПЪРВИЧНИЯТ КЛЮЧ е имплицитно добавен към всеки вторичен ключ. За да достигнете до „данните“ с помощта на PK (ACTIVITY_ID) е друго търсене на BTree, потенциално произволно. Следователно е потенциално бавно. (Но не много бавно във вашия случай.)
  4. Това спира след LIMIT реда.

План Б:Игнорирайте таблицата

  1. Сканирайте таблицата, създавайки tmp таблица. (Вероятно е в паметта.)
  2. Сортирайте таблицата tmp
  3. Отлепете LIMIT реда.

Във вашия случай (96 -- 1% от 10K) е изненадващо, че избра сканирането на таблицата. Обикновено границата е някъде около 10% -30% от броя на редовете в таблицата.

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

Каква версия на MySQL използвате? (Не, не знам за промени в тази област.)

Едно нещо, което бихте могли да опитате:OPTIMIZE TABLE ACTIVITIES; Това ще възстанови таблицата, като по този начин ще преопакова блоковете и ще доведе до потенциално различни статистики. Ако това помогне, бих искал да го знам – тъй като обикновено казвам „Оптимизиране на таблицата е безполезно“.




  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 FLOAT тип данни и проблеми с повече от 7 цифрен мащаб

  2. JDBC връзка – Class.forName срещу Class.forName().newInstance?

  3. Функция MySQL CEILING() – закръгля до най-близкото цяло число

  4. разделен със запетая низ от избрани стойности в mysql

  5. Изберете най-отличителните резултати, подредени по честота