Индексът, който описваш, е почти безсмислен. Индексът се използва най-добре, когато трябва да изберете малък брой редове в сравнение с общия брой редове.
Причината за това е свързана с начина, по който базата данни осъществява достъп до таблица. Таблиците могат да бъдат оценени или чрез пълно сканиране на таблицата, при което всеки блок се чете и обработва на свой ред. Или чрез търсене на rowid или ключ, където базата данни има ключ/rowid и чете точния ред, който изисква.
В случай, когато използвате клауза where въз основа на първичния ключ или друг уникален индекс, напр. where id = 1
, базата данни може да използва индекса, за да получи точна препратка към мястото, където се съхраняват данните на реда. Това е очевидно по-ефективно от извършването на пълно сканиране на таблицата и обработка на всеки блок.
Сега обратно към вашия пример, имате клауза where от where status = 'enabled'
, индексът ще върне 150 милиона реда и базата данни ще трябва да чете всеки ред на свой ред, като използва отделни малки четения. Докато достъпът до таблицата с пълно сканиране на таблицата позволява на базата данни да използва по-ефективни по-големи четения.
Има момент, в който е по-добре просто да направите пълно сканиране на таблицата, вместо да използвате индекса. С mysql можете да използвате FORCE INDEX (idx_name)
като част от вашата заявка, за да позволите сравнения между всеки метод за достъп до таблица.
Справка:http://dev .mysql.com/doc/refman/5.5/en/how-to-avoid-table-scan.html