2008-12-15 2 views
0

У меня есть очень простой выбор, как это:MySQL индекс диапазона

SELECT * FROM table 
    WHERE column1 IN (5, 20, 30); 

на column1 является seted индекса, после объяснения запроса является индексом используется, все выглядит нормально.

, но если есть больше, чем три значения в диапазоне, например:

SELECT * FROM table 
     WHERE column1 IN (5, 20, 30, 40); 

индекса не используются и выберите прогоны через все записи. Я делаю что-то неправильно? спасибо

ответ

2

Сколько строк в MySql думаете, что есть в таблице?

Mysql часто (как правило, правильно!) Предполагает, что будет быстрее выполнять последовательное сканирование строк, а не обходиться с более сложным доступом через индекс.

Он варьируется от СУБД к СУБД, но точка компромисса составляет около 30% строк.

IE. Если оптимизатор ожидает, что более 30% строк будут выбраны, он будет последовательно сканировать всю таблицу, поскольку это обычно быстрее, чем выполнение большого количества прямого доступа через индексы.

+0

Очень правдиво, было бы также полезно периодически вычислять статику и после значительных изменений данных, чтобы оптимизатор решил правильно. +1 – Dheer 2008-12-15 11:13:15

Смежные вопросы