Построение индекса + выборка на порядок быстрее сортировки

kvasimodo
Дата: 12.09.2006 18:52:37
Запрос (довольно сложный, много маленьких таблиц джойнятся к довольно большой (3 млн), выбирается top 100) с сортировкой по непроиндексированному полю выполняется 10 минут.
Построение индекса по необходимому полю - секунд сорок.
Выборка после индекса - десять секунд.
Отсюда вопрос - если этот индекс мне не нужен нигде, кроме этого запроса, можно ли каким-то хинтом разрешить серверу построить что-то вроде временного индекса в темпдб, например, для выполнения конкретного запроса?
И вообще, откуда берется такая разница во времени?
Prolog
Дата: 12.09.2006 19:05:55
Хинта такого нет. Но можно сначала попробовать выбрать во временную таблицу 100 записей с сортировкой по непроиндексированному полю, а потом уже join'ить с маленькими таблицами. Бедут больше 10 секунд, но меньше 10 минут. Попробуйте.
Александр Волок (def1983)
Дата: 12.09.2006 19:07:37
А чем то индекс Вам мешает? :)

Если поле не селективное (т.е. уникальных значений блоьше 90%), то оптимизатору значительно быстрее найти по индексу 100 записей, чем фулсканить 3 млн...
Prolog
Дата: 12.09.2006 19:09:02
kvasimodo
И вообще, откуда берется такая разница во времени?

На то они и создаются индексы, чтобы получить разницу во времени. А сравните ка оба плана с индексом и без. Кстати, сраже после создания индекса он почти что весь лежит в памяти и выборка по нему будет очень быстрой.
SanyL
Дата: 12.09.2006 22:34:17
действительно а почему вы не хотите оставить этот индекс? чем это плохо, если он нужен?
SanyL
Дата: 12.09.2006 22:36:04
кстати а планы выполнения можно увидеть? есть некоторые сомнения что проблема только в этом... желательно планы с и без этого индекса