Защо 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