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 млн...