в один момент времени для запроса используется только один индекс?
Var79
Дата: 16.09.2006 14:35:14
тогда почему выполняется такой план запроса? (см приложение)
Var79
Дата: 16.09.2006 14:41:16
то есть откуда появляется обращение к трем индексам когда должен по идее использоватся 1н, и даже раз выбираются 3 индекса то по какому алгоритму они используются?
Fire83
Дата: 16.09.2006 15:32:15
А почему вы решили, что сервер не может использовать несколько индексов в селекте? Что здесь ненормального? На основании сведений статистики сервер может использовать несколько индексов, а затем объединять результаты.
Var79
Дата: 16.09.2006 15:50:05
Fire83 |
А почему вы решили, что сервер не может использовать несколько индексов в селекте? Что здесь ненормального? На основании сведений статистики сервер может использовать несколько индексов, а затем объединять результаты. |
сервер не может использовать несколько индексов в селекте - хм... попробую сформулировать. Насколько я знаю это свойство индекса что его только одного можно использовать, то есть индекс по складу нелзья обединить с индексом по товару, может быть только отдельный индекс по двум полям склад и товар, немогу представить каким алгаритмом нужно руководствоватся, именно и интересует пример и алгоритм когда в данном запросе нужно использовать несколько индексов, более того в QA ЭТОТ ЖЕ ЗАПРОС ЕСЛИ ЗАПУСТИТЬ ЕГО НЕСКОЛЬКО РАЗ ПОДРЯТ СТРОИТ РАЗНЫЙ ПЛАН, ТОЕСТЬ ТО ОДИН ИНДЕКС ИСПОЛЬЗУЕТСЯ ТО ТРИ
Glory
Дата: 18.09.2006 01:45:19
Var79 |
Насколько я знаю это свойство индекса что его только одного можно использовать, то есть индекс по складу нелзья обединить с индексом по товару, может быть только отдельный индекс по двум полям склад и товар, немогу представить каким алгаритмом нужно руководствоватся, именно и интересует пример и алгоритм когда в данном запросе нужно использовать несколько индексов, |
Логика использования индексов всегда одна - уменьшить количество физических чтений с диска. Технология использования нескольких индексов одной таблицы в запросе называется index intersection. Примеры есть у Kalen Delaney, Inside SQL2000
Crimean
Дата: 19.09.2006 14:02:14
ну у меня для некоторых запросов часто используется по 2-3 индекса. так вот. сервер приходится от этого "отучать" указывая явно index=1... ибо сильно выгоднее в результате получается
alexeyvg
Дата: 19.09.2006 14:36:12
Crimean |
ну у меня для некоторых запросов часто используется по 2-3 индекса. так вот. сервер приходится от этого "отучать" указывая явно index=1... ибо сильно выгоднее в результате получается |
Я думаю, что если всегда гарантированно использование одного индекса было бы выгоднее, то index intersection не стали бы делать. :-)
Хотя, конечно, сервер может ошибиться.
Prolog
Дата: 19.09.2006 14:36:37
А вы попробуйте создать один индекс по трем столбцам on ra132(sp133,sp135,sp134) и может быть еще добавить четвертый DATE_TIME_IDDOC.
Впрочем, столбцы у вас символьные размеры их не известны, может и навредить.
Crimean
Дата: 20.09.2006 13:17:03
> Хотя, конечно, сервер может ошибиться
он не ошибается в общепринятом смысле этого слова. просто мне надо "быстрее", а для него это "дороже". а поскольку управлять оптимизацией нам не надо - пишу хинты. было бы возможно указать оптимизатору какой запрос надо выполнить БЫСТРО, а какой ДЕШЕВО...