Указатель даты - Поиск по дальности Все строки, Маленькие Не - PullRequest
0 голосов
/ 27 апреля 2011

Почему MySQL ищет все строки, когда я переключаюсь на диапазон в 1 год?

--Table dates  
id (int)   
date (timestamp)  
value (varchar)  

PRIMARY(id), date_index(date)  

1750 строк

Выполнение
EXPLAIN SELECT * FROM dates WHERE date BETWEEN '2011-04-27' AND '2011-04-28'

Отображение столбцов строк 18 строк .
Если я увеличу или уменьшу диапазон МЕЖДУ - например, 1 год - столбец строк отобразит 1750 строк .

EXPLAIN SELECT * FROM dates WHERE date BETWEEN '2011-04-27' AND '2012-04-28' EXPLAIN SELECT * FROM dates WHERE date BETWEEN '2010-04-27' AND '2011-04-28'

1 Ответ

1 голос
/ 27 апреля 2011

Оптимизатор строит план запроса в зависимости от нескольких факторов, включая объем / распределение данных. Моим лучшим предположением будет то, что у вас не намного больше данных за год или что использование индекса для данных за год не будет использовать намного меньше строк, чем общий размер таблицы.

Если это не звучит правильно, вы можете опубликовать вывод:

SELECT MIN(date), MAX(date) FROM dates;
SELECT COUNT(*) FROM dates WHERE date BETWEEN '2011-04-27' AND '2012-04-28';

Эта статья, которую я написал, показывает несколько примеров того, как оптимизатор тоже работает: Что делает хороший индекс MySQL? Часть 2: Количество элементов

...