2014-01-26 4 views
1

запросов выглядит следующим образом:Медленные запросы после добавления INDEX

SELECT ... FROM ... 
LEFT OUTER JOIN ... WHERE col1 = ? AND col2 = ? AND col3 IS NULL ORDER BY ... 

и

SELECT ... FROM ... 
WHERE col3 IS NULL ORDER BY ... 

col1, col2 имеют индексы, но col3 не сделал.

я решил добавить индекс к col3, а также, потому что запросы были немного медленно, от 0002s до 0.4 сек на каждый запрос (все из них принимают 1,3 секунды):

CREATE INDEX col3_idx ... 
REINDEX col3_idx; 

Но после этого они получили гораздо медленнее. Запросы теперь занимают 20 секунд.

Я думал, что индексы должны ускорить выбирает:/

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

ответ

0

Основная проблема - это не NULL, это факт, что вы создали три разных индекса, а не один.

для первого запроса, я бы предложил по индексу на (col1, col2, col3).

Однако второй запрос может быть трудно проиндексировать, если у вас есть только значения NULL/1, потому что в любом случае может быть лучше выполнить полное сканирование таблицы. Но индексирование также связано с сортировкой, поэтому было бы интересно также увидеть предложение ORDER BY, тогда можно было бы также определить хороший индекс для этого запроса (возможно, даже один хороший индекс для обоих запросов!).

Ссылки:

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