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

Защо MySQL не използва индекс за по-голямо сравнение?

Вероятно ще бъде по-добре да оставите MySql да вземе решение за плана на заявката. Има голяма вероятност сканирането на индекс да бъде по-малко ефективно от пълното сканиране на таблицата.

Има две структури от данни на диска за тази таблица

  1. Самата маса; и
  2. Индексът на B-дървото на първичния ключ.

Когато стартирате заявка, оптимизаторът има две опции за достъп до данните:

SELECT * FROM userapplication WHERE application_id > 1025;

Използване на индекса

  1. Сканирайте индекса на B-Tree, за да намерите адреса на всички редове, където application_id > 1025
  2. Прочетете съответните страници на таблицата, за да получите данните за тези редове.

Не се използва индексът

Сканирайте цялата таблица и изберете подходящите записи.

Избор на най-добрата стратегия

Работата на оптимизатора на заявки е да избере най-ефективната стратегия за получаване на данните, които искате. Ако има много редове с application_id > 1025 тогава всъщност може да бъде по-малко ефективно използването на индекса. Например, ако 90% от записите имат application_id > 1025 тогава оптимизаторът на заявки ще трябва да сканира около 90% от крайните възли на индекса на b-дървото и след това да прочете поне 90% от таблицата, за да получи действителните данни; това би включвало четене на повече данни от диска, отколкото просто сканиране на таблицата.



  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:Преглед с подзаявка в ограничението на клаузата FROM

  2. MySQL - Изберете последния вмъкнат ред по най-лесния начин

  3. Как да изберете от MySQL, където името на таблицата е променлива

  4. как да синхронизирам sqlite с Mysql

  5. ГРЕШКА 1452 (23000):Не може да се добави или актуализира дъщерен ред:ограничение на външния ключ е неуспешно