оптимизирующий запрос - PullRequest
       10

оптимизирующий запрос

1 голос
/ 23 сентября 2010

У меня есть таблица foo, которая записывает наблюдения видов птиц.foo_id - это его PK, другие соответствующие столбцы - это s_date, широта и долгота.разновидность_вида - это его ФК.У меня есть индексы по s_date, широте и долготе, видов.Таблица foo насчитывает 20 миллионов записей и увеличивается.Следующий запрос дает мне топ-10 последних наблюдений видов на заданном широте / долготе.Запрос занимает слишком много времени (иногда более 10 минут).Как это оптимизировать?Я использую mysql.

SELECT species_id, max(s_date) 
FROM foo 
WHERE latitude >= minlat 
    AND latitude <= maxlat 
    AND longitude >= minlon 
    AND longitude <= max lon 
GROUP BY species_id 
ORDER BY MAX(s_date) DESC LIMIT 0, 10;

1 Ответ

0 голосов
/ 23 сентября 2010

Я понимаю, что у вас есть отдельные индексы для полей, которые вы упоминаете. Возможно, вы захотите попробовать добавить составной индекс (он же индекс нескольких столбцов) на (latitude, longitude):

CREATE INDEX ix_foo_lat_lng ON foo (latitude, longitude);

Возможно, вы захотите запустить EXPLAIN для вашего запроса, чтобы увидеть, какие индексы использует MySQL. Цитирование из MySQL Manual :: Как MySQL использует индексы :

Предположим, вы выполнили следующую инструкцию SELECT:

mysql> SELECT * FROM tbl_name WHERE col1=val1 AND col2=val2;

Если в столбцах col1 и col2 существует индекс из нескольких столбцов, соответствующие строки могут быть получены напрямую. Если в col1 и col2 существуют отдельные индексы, состоящие из одного столбца, оптимизатор попытается использовать оптимизацию слияния индексов *1022* или попытается найти наиболее ограничивающий индекс, решив, какой индекс найдет меньше строк, и используя этот индекс для извлечения строк.

Вас также может заинтересовать следующая презентация:

Автор описывает, как вы можете использовать Haversine Formula в MySQL для упорядочения по близости и ограничения ваших поисков до определенного диапазона. Он также описывает, как избежать полного сканирования таблицы для таких запросов, используя традиционные индексы для столбцов широты и долготы.


1 PDF версия

...