Быстрый поиск страниц в MySQL, использование индекса?

StackOverflow https://stackoverflow.com/questions/603041

Вопрос

Я хотел бы ускорить запрос MySQL, который в основном извлекает страницу данных, следуя приведенному ниже шаблону

select
 my_field_A,
 my_field_B
where
 time_id >= UNIX_TIMESTAMP('1901-01-01  00:00:00') AND
 time_id < UNIX_TIMESTAMP('2009-01-16  00:00:00')

Поле time_id является индексом MySQL, тем не менее, запрос ведет себя так, как если бы при каждом запросе считывалась вся база данных (извлечение пары строк уже происходит довольно медленно).Я не эксперт в MySQL.Может кто-нибудь догадаться, что я делаю не так?

Это было полезно?

Решение

Убедитесь, что у вас есть индекс (B-дерево) для time_id, это должно быть эффективно для запросов диапазона.Также убедитесь, что time_id указан в соответствующем формате time.

Если вы действительно хотите понять, что делает mysql, вы можете добавить ключевое слово "explain" перед запросом и запустить его в вашем клиенте mysql.Это покажет некоторую информацию о том, что делает mysql и какие виды сканирования выполняются.

http://dev.mysql.com/doc/refman/5.0/en/using-explain.html

Другие советы

Поскольку, вероятно, существует множество time_idподпадает под эти критерии, MySQL возможно, вы подумаете, что полное сканирование таблицы лучше.

Попробуйте принудительно ввести индекс:

SELECT
 my_field_A,
 my_field_B
FROM mytable FORCE INDEX (index_name_on_time_id)
WHERE
 time_id >= UNIX_TIMESTAMP('1901-01-01  00:00:00') AND
 time_id < UNIX_TIMESTAMP('2009-01-16  00:00:00')

Вам нужен более низкий диапазон?Есть ли какие-либо записи ранее 1901 года?Как генерируется столбец time_id?Если time_id всегда больше с каждой новой записью, добавляемой в базу данных, вы можете рассмотреть возможность поиска идентификатора с ближайшей записью к 2009-01-16, а затем выбрать по идентификатору

select my_field_A, my_field_B
FROM
  mytable
WHERE
  id <= ?

Если это не так, попробуйте проверить разбиение на разделы в "доступно из MySQL 5.1" и разбейте таблицу по годам, это должно значительно увеличить скорость.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top