Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Индексы и план запроса  [new]
Paul A. Kuptsov
Member

Откуда: Москва
Сообщений: 53
Люди,

В какую сторону копать?
Есть два сервера (один локальный, один удаленный). Структура таблиц идентичная, количество данных приблизительно одинаковое (+- 5 (пять) записей на таблицу). На этих серверах смотрится план одного и того-же запроса и он оказывается разным (на одном сервере используется Index Seek, на другом Index Scan).
3 мар 04, 17:16    [562036]     Ответить | Цитировать Сообщить модератору
 Re: Индексы и план запроса  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
дело в том, что сервер сам смотрит, что для него лучше... (по статистике)
сделать индекс сиик, или индекс скан... можно конечно явно через
from mytab with (index(bla-bla-bla))

указать... но ето не есть лучший вариант


для спящего время бодрствования равносильно сну
3 мар 04, 17:30    [562069]     Ответить | Цитировать Сообщить модератору
 Re: Индексы и план запроса  [new]
Paul A. Kuptsov
Member

Откуда: Москва
Сообщений: 53
Алексей2003, большое спасибо.

В таком случае еще один вопросик. Правильно ли я понял, что процесс оптимизации сводится к тому, что бы не было Table Scan (интересует пока только запросы типа select)?
3 мар 04, 18:58    [562297]     Ответить | Цитировать Сообщить модератору
 Re: Индексы и план запроса  [new]
Gena G.
Member

Откуда: Oz
Сообщений: 977
Хм... А статистику обновить не пробовали? Или перестроить те самые индексы?
3 мар 04, 20:11    [562408]     Ответить | Цитировать Сообщить модератору
 Re: Индексы и план запроса  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
не совсем так... оптимизатор также выбирает, делать ему table scan или по индексу...
если оптимизатор посчитает что скан таблицы будет для него дешевле, чем прыгание с индекса на страницу и обратно, то будет скан таблицы...


для спящего время бодрствования равносильно сну
3 мар 04, 20:14    [562412]     Ответить | Цитировать Сообщить модератору
 Re: Индексы и план запроса  [new]
uagg
Member

Откуда:
Сообщений: 35
Правильно ли я понял, что процесс оптимизации сводится к тому, что бы не было Table Scan (интересует пока только запросы типа select)?

Не правильно :(
Table Scan частенько бывает более выигрышной стратегией, чем другие способы поиска. Правда оптимизатор об этом честно предупреждает. Обычно. :)
9 мар 04, 15:55    [568686]     Ответить | Цитировать Сообщить модератору
 Re: Индексы и план запроса  [new]
AAron
Member

Откуда: Москва
Сообщений: 4324
автор
Не правильно :(
Table Scan частенько бывает более выигрышной стратегией, чем другие способы поиска. Правда оптимизатор об этом честно предупреждает. Обычно. :)

Неужели TableScan частенько бывает более выигрышной стратегией? И насколько часто? А если таблица размером в миллионы записей, несколько ГБ размером?
9 мар 04, 23:42    [569283]     Ответить | Цитировать Сообщить модератору
 Re: Индексы и план запроса  [new]
BootMaker
Member

Откуда: С-Петербург
Сообщений: 902
Пример в лоб - индекс по битовому полю, мягко говоря, мало эффективен в отличии от фулскана. Есть такое понятие - селективность, только я забыл точное его определение, поэтому врать не буду, пусть лучше другие честно переведут :)
10 мар 04, 00:18    [569290]     Ответить | Цитировать Сообщить модератору
 Re: Индексы и план запроса  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
автор
Неужели TableScan частенько бывает более выигрышной стратегией? И насколько часто? А если таблица размером в миллионы записей, несколько ГБ размером?

Угу...

Коэффициент избирательности = [100 * (Количество строк, уникально определяемых данным значением ключа) / (Общее количество строк в таблице)]

Если коэффициент избирательности невелик (большинство строк таблицы уникально определяются данным ключем), то индекс обладает высокой степенью избирательности и пригоден для работы оптимизатора. Основываясь на избирательности данных, оптимизатор скуля выбирает те или иные индексы для выполнения запроса. Чем выше избирательность, тем быстрее скуль извлечет нужную строку/строки.
Если коэффициент избирательности ключа меньше 15% (оптимизатор не может откинуть 85% строк, задаваемых таким индексом), то оптимизатор выберет сканирование таблицы, которое в таких случаях эффективнее, чем поиск данных по B-дереву.

Если система допускает возврат пользователю тех строк, значение какой-либо колонки в которых встречается, допустим в 90% случаев, то на кой хрен индекс по такой колонке, если оптимизатору дешевле просканировать страницы данных, не читая индексных (я к тому, что некоторые умудряются так спроектировать систему, что она позволяет им вывыливать из таблицы 90% или даже 100% строк в которой их миллионы, а сама таблица несколько гигов).
10 мар 04, 08:41    [569421]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить