Справочник MySQL

5.4.3. Използването на индекса в MySQL

Всички MySQL индекси (първичен. УНИКАЛНИ. И индекс), съхранявани в B-дърво. Strings автоматично се компресират, за да се отстранят пропуските в префиксите и крайните интервали (виж раздел 6.5.7, «CREATE INDEX Синтаксис").

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

Бързо намиране на редовете, които съответстват на клауза WHERE.

Екстракт линии от други таблици при извършване на сдружение.

За да сортирате или групиране в таблицата, ако тези операции се извършват на най-лявата префикс на ключа се използва (например ORDER BY key_part_1, key_part_2). Ако DESC трябва всички ключови части. Ключът се чете в обратен ред (виж раздел 5.2.7: "Как MySQL Оптимизира ORDER BY»).

В някои случаи тя може да се оптимизира, за да извлечете стойности без да се консултира файла с данни. Ако всички колони, използвани в някои маса са числови и формират най-лявата префикс за ключ, за да се осигури висока скорост, на желаната стойност може да бъде извлечена директно от индекса на дървото:

Да предположим, че направи следното изявление, SELECT.

Ако има индекс на няколко колони на col1 и col2, съответните редове могат да бъдат извлечени по директно. В случай на колона col1 и col2 съществуват отделни кодове, оптимизатор опитва да намери най-рестриктивната индекса чрез определяне което индекс намира малко редове и използва индексът за извличане на тези линии.

Ако таблицата има индекс на няколко колони, всяка най-лявата префикс на индекса може да се използва от оптимизатор да намерите редове. Например, ако има индекс на трите колони (col1, col2, col3), а след това има възможност индексирана търсене (col1), (col1, col2) и (col1, col2, col3).

MySQL не може да използва частично индекс, ако колоните не формират най-лявата префикс на индекса. Да предположим, че има SELECT изявление. показано по-долу:

Ако има индекс на (col1, col2, col3), само първата заявка е показано по-горе използва индекса. Второто и третото искания вършите, са индексирани колони, но (col2) и (col2, col3) не е най-левите част представките (col1, col2, col3).

MySQL използва индекси също за подобни сравнения. ако аргументът в изражение представлява постоянен низ не започва със символ шаблон. Например, следните SELECT отчети използват индекси:

Само редове се разглеждат в първия отбор с "Патрик" <= key_col <"Patricl". а во второй - только строки с "Pat" <= key_col <"Pau".

Следващите SELECT отчети няма да използват индекси:

В първия отбор, подобни стойност започва с маска характер. Втората команда като стойност не е постоянна.

Във версията на MySQL 4.0 се произвежда друг оптимизация на СХОДЕН експресия. Ако използвате израз. Като "% низ%" и дължината на низ (стринг) повече от 3 знака, MySQL ще използва алгоритъм Turbo Бойер-Мур да се инициализира низ шаблон и след това да използвате този шаблон, за да извършите търсене по-бързо.

При търсене с помощта COLUMN_NAME е нула ще използва индекси ако COLUMN_NAME е индекс.

MySQL обикновено използва индекса, която намира най-малък брой редове. Индексът се използва за колони, които можете да сравните със следните опции:,>,> =, <, <=, BETWEEN и LIKE с префиксом, не содержащим шаблонного символа, такого как something%.

Ако индексът не обхващат всички нива и в клаузата WHERE. тя не се използва за оптимизиране на заявката. С други думи: за да можете да използвате индекса, префикс на индекса трябва да бъдат включени във всеки И група.

Оттук нататък, когато клаузите използват индекси:

Оттук нататък, когато клаузи не използват индекси:

В някои случаи, MySQL няма да използва индекс, дори ако това е възможно. Няколко примери на такива ситуации е дадено по-долу: