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

MySQL не използва индекс при проверка =1, а го използва с =0

Защо MySQL не използва индекс?
MySQL няма да използва индекс, ако е голям процент от редовете имат тази стойност.

Защо добавянето на use index до заявката не работи тука
Добавяне на use index клаузата няма да има ефект, защото use index ще предложи само кое индекс за използване, няма да предложи дали да се използва индекс или не.

Внимание, когато използвате тестови таблици с няколко реда
Това е особено неприятно, когато използвате тестови таблици с няколко реда, тъй като MySQL ще откаже да използва индекс и е трудно да се види какво не е наред с вашата заявка.
Така че не забравяйте да добавите достатъчно редове към тестова таблица за да го направи реалистичен тест.

Безполезно ли е използването на индекс за колони с ниска мощност?
Индексирането на булеви колони не е толкова полезно както си помислихте, преди да зададете този въпрос.
Той обаче също не е безполезен или.
С InnoDB MySQL ще се опита да извлече данни с помощта на индексите, ако е възможно, ако вашето булево поле има индекс, заявката:

SELECT id, bool_field FROM table_with_many_columns_and_rows WHERE bool_field = 1

Може да чете всички данни в покриващия индекс за bool_field тъй като вторичните индекси в InnoDB винаги включват първичния индекс (id) също така.
Това е по-бързо, защото MySQL не трябва да чете цялата таблица в паметта.

В MyISAM това не работи и MySQL ще прегледа цялата таблица.

Но мога да използвам force index
Можете, но при индекси с ниска кардиналност това ще направи заявката ви по-бавна, а не по-бърза. Отменяйте индексите само при сложни заявки и само ако знаете правилата, които MySQL използва за избор на индекси.

Връзки:
Вижте:http://dev.mysql .com/doc/refman/5.1/en/mysql-indexes.html
и: http://www.xaprb.com/blog/2006/07/04/how-to-exploit-mysql-index-optimizations/

Ако искате книга по тази тема:прочетете
Високопроизводителен MySQL:http://oreilly.com /каталог/9780596003067



  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. Laravel 5:Нарушение на ограничението за интегритет:1452 Не може да се добави или актуализира дъщерен ред:ограничение на външния ключ е неуспешно

  3. Версията на php-mysql е в конфликт с Mysql сървъра

  4. еквивалент на gene_series() в MySQL

  5. как да върна UUID на Java, съхранен в DB като двоичен