Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Oracle's Index Skip Scan in SQL Server  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Никто не хочет проголосовать за то чтобы в SQL Server реализовали оракловый Index Skip Scan?

https://connect.microsoft.com/SQLServer/feedback/details/695044/implement-index-skip-scan

В 2-х словах, для тех кто не в курсе или лень читать на буржуйском, объяснение:

http://asuxxi.narod.ru/oradoc/ora/ora020.htm
В Oracle9i имеются даже более неопровержимые доводы, чтобы первым задавать наименее селективный столбец: новая функциональная возможность, называемая поиск в индексе с пропусками (index skip scan).

Благодаря этой возможности индекс, в котором наименее отличающийся столбец задан первым, может быть использован в запросах даже тогда, когда столбец в предикате запроса не является в индексе крайним левым столбцом.

Поиск с пропусками хорошо срабатывает только тогда, когда крайний левый столбец индекса имеет очень мало отличающихся значений, и оптимизатор понимает это. Например, рассмотрим индекс (GENDER, EMPNO), где GENDER (пол) имеет значения 'M' и 'F', а EMPNO – уникальный столбец. Это очень хорошо для поиска с пропусками. Итак, рассмотрим запрос:

select * from t where empno = 5;

Оптимизатор Oracle9i может принять решение об использовании указанного индекса и метода поиска с просмотрами. Концептуально запрос выполняется следующим образом:

select * from t where GENDER='M' and
empno = 5
UNION ALL
select * from t where GENDER='F' and
empno = 5;
9 дек 11, 21:54    [11739949]     Ответить | Цитировать Сообщить модератору
 Re: Oracle's Index Skip Scan in SQL Server  [new]
step_ks
Member

Откуда:
Сообщений: 936
Могут неслабо поехать отлаженные планы. А так, по-большому счету, почему бы нет. Проголосуем.
9 дек 11, 22:15    [11740036]     Ответить | Цитировать Сообщить модератору
 Re: Oracle's Index Skip Scan in SQL Server  [new]
Коляныч
Member

Откуда:
Сообщений: 279
Mind
В 2-х словах, для тех кто не в курсе или лень читать на буржуйском, объяснение:

А можно это же самое, только по-русски?
9 дек 11, 22:27    [11740091]     Ответить | Цитировать Сообщить модератору
 Re: Oracle's Index Skip Scan in SQL Server  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31484
Mind
Никто не хочет проголосовать за то чтобы в SQL Server реализовали оракловый Index Skip Scan?
Да, полезная вещь. Надо голосовать...
9 дек 11, 23:21    [11740336]     Ответить | Цитировать Сообщить модератору
 Re: Oracle's Index Skip Scan in SQL Server  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5499
Блог
Хм. Ну в общем-то фича хорошая... (Если не считать того, что пока её будут делать, не будут делать другие, возможно более важные)
Но только непонятно, зачем вообще иметь такой индекс?
Почему нельзя просто менее селективные поля запихнуть в конец?
9 дек 11, 23:24    [11740347]     Ответить | Цитировать Сообщить модератору
 Re: Oracle's Index Skip Scan in SQL Server  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
step_ks
Могут неслабо поехать отлаженные планы. А так, по-большому счету, почему бы нет. Проголосуем.


Я вижу проблему только в том, что если будет корявая статистика, то сервер может сваливаться в этот самый Index Skip Scan и пытаться пропустить первое поле если в нём скажем 100 тысяч уникальных значений вместо предполагаемых 10.
По идее даже особой сложности с определением стоимости такого оператора быть не должно. Стоимость стандартного Index Seek * Distinct Count от первого поля из статистики.
10 дек 11, 00:09    [11740513]     Ответить | Цитировать Сообщить модератору
 Re: Oracle's Index Skip Scan in SQL Server  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
DeColo®es
Хм. Ну в общем-то фича хорошая... (Если не считать того, что пока её будут делать, не будут делать другие, возможно более важные)
Но только непонятно, зачем вообще иметь такой индекс?
Почему нельзя просто менее селективные поля запихнуть в конец?

Не всегда возможно создать индекс на каждый запрос. Подобного рода оператор сделает некоторые индексы более универсальными.

Менее селективные в конец или те которые реже учавствуют в запросах в конец? Порядок полей не должен определятся селективностью значений, по крайней мере пока не имплементирован Index Skip Scan. Но даже если это будет сделано, тогда как раз будет иметь смысл делать прямо противоположное, неселективные поля, периодически учавствующие запросах пихать в начало индекса тем самым создавая индексы покрывающие более количество запросов.
10 дек 11, 00:55    [11740644]     Ответить | Цитировать Сообщить модератору
 Re: Oracle's Index Skip Scan in SQL Server  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5499
Блог
Mind
Подобного рода оператор сделает некоторые индексы более универсальными.
А можно более конкретный пример?
Я лично могу вспомнить только один случай, когда нужно искать по низкоселективным полям, но там скорее нужны фильтрованные индексы.
10 дек 11, 09:52    [11740958]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить