Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Поиск по индексу вместо скана. Почему?
|
|||
|---|---|---|---|
|
#18+
Коллеги, приветствую! Никак не могу разобраться в логике работы оптимизатора (MS SQL 2014). Вроде как, если я задаю условие под которое подходит большая часть строк таблицы, тогда у меня должен выбираться план со сканированием, т.к. это должно быть быстрее. Но на практике выбирается план с поиском по индексу. Запрос: Код: sql 1. 2. 3. 4. 5. В таблице 150 тыс. записей, в поле _Fld1247 всего 10 значений которые равны 1, остальные равны 100. По идее в текущем запросе оптимизатор должен был бы выбрать скан индекса ведь я возвращаю почти всю таблицу, но идет Index Seek. Почему так происходит? Заранее спасибо за ответы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2018, 18:09 |
|
||
|
Поиск по индексу вместо скана. Почему?
|
|||
|---|---|---|---|
|
#18+
Потому что читать 149990 записей как правило не дольше, чем 150000. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2018, 18:20 |
|
||
|
Поиск по индексу вместо скана. Почему?
|
|||
|---|---|---|---|
|
#18+
Гавриленко Сергей Алексеевич, А как же селективность индекса и все такое? Если скорость чтения одинаковая, то почему именно Seek, а не Scan? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2018, 19:21 |
|
||
|
Поиск по индексу вместо скана. Почему?
|
|||
|---|---|---|---|
|
#18+
Андрей_Батькович, В вашем случае Index Seek = Range Scan Подробнее - http://sqlblog.com/blogs/paul_white/archive/2011/02/17/so-is-it-a-seek-or-a-scan.aspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2018, 19:57 |
|
||
|
Поиск по индексу вместо скана. Почему?
|
|||
|---|---|---|---|
|
#18+
Андрей_Батькович, Возможно, в первый раз запрос выполнялся со значением параметра @P1 = 1 ? Тогда сервер "честно подсмотрел" это значение, увидел, что оно равно 1, понял, то для такого расклада проще делать индекс скан, и сложил "кривой план" себе в голову кэш планов. Во второй же раз сервер уже по "накатанной" выполнил запрос с тем же планом, что и раньше, несмотря на то, что значение параметра изменилось с 1 на 100. Для проверки этой догадки попробуйте "вежливо попросить" сервер перестраивать план каждый раз (option(recompile)) и посмотрите на результат при значении параметра 100. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2018, 19:58 |
|
||
|
Поиск по индексу вместо скана. Почему?
|
|||
|---|---|---|---|
|
#18+
Щукина АннаАндрей_Батькович, Возможно, в первый раз запрос выполнялся со значением параметра @P1 = 1 ? Тогда сервер "честно подсмотрел" это значение, увидел, что оно равно 1, понял, то для такого расклада проще делать индекс скан seek , конечно же, и сложил "кривой план" себе в голову кэш планов. Во второй же раз сервер уже по "накатанной" выполнил запрос с тем же планом, что и раньше, несмотря на то, что значение параметра изменилось с 1 на 100. Для проверки этой догадки попробуйте "вежливо попросить" сервер перестраивать план каждый раз (option(recompile)) и посмотрите на результат при значении параметра 100. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2018, 20:00 |
|
||
|
Поиск по индексу вместо скана. Почему?
|
|||
|---|---|---|---|
|
#18+
Щукина АннаЩукина АннаАндрей_Батькович, Возможно, в первый раз запрос выполнялся со значением параметра @P1 = 1 ? Тогда сервер "честно подсмотрел" это значение, увидел, что оно равно 1, понял, то для такого расклада проще делать индекс скан seek , конечно же, и сложил "кривой план" себе в голову кэш планов. Во второй же раз сервер уже по "накатанной" выполнил запрос с тем же планом, что и раньше, несмотря на то, что значение параметра изменилось с 1 на 100. Для проверки этой догадки попробуйте "вежливо попросить" сервер перестраивать план каждый раз (option(recompile)) и посмотрите на результат при значении параметра 100. у ТС тривиальный план, там даже статистику смотреть не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2018, 20:03 |
|
||
|
Поиск по индексу вместо скана. Почему?
|
|||
|---|---|---|---|
|
#18+
msLex, это вы на основании чего сделали такие выводы? ТС план не привел. А то, что он называет таблицей - на деле может оказаться представлением с кучей джойнов и развесистой логикой получение итогового результата... Вольный и до гениальности краткий (если верить пословице, что "краткость - сестра таланта") пересказ автором топика плана запроса - также не внушает доверия . Но даже если и так, то сервер ,в принципе, мог "ошибитьс" и на линейном запросе из одной таблицы с единственным условием фильтрации. поэтому, как по мне, так совсем не очевидно, что у автора всё тривиально... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2018, 20:08 |
|
||
|
Поиск по индексу вместо скана. Почему?
|
|||
|---|---|---|---|
|
#18+
Щукина АннаmsLex, это вы на основании чего сделали такие выводы? ТС план не привел. А то, что он называет таблицей - на деле может оказаться представлением с кучей джойнов и развесистой логикой получение итогового результата... Вольный и до гениальности краткий (если верить пословице, что "краткость - сестра таланта") пересказ автором топика плана запроса - также не внушает доверия . Но даже если и так, то сервер ,в принципе, мог "ошибитьс" и на линейном запросе из одной таблицы с единственным условием фильтрации. поэтому, как по мне, так совсем не очевидно, что у автора всё тривиально... С вью я сильно сомневаюсь (хотя кто знает), но вот выборка 1 поля из таблице с фильтром по этому полю и наличию индекса по этому же полю это точно тривиальный план. Если приведете репро обратного, буду благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2018, 20:19 |
|
||
|
Поиск по индексу вместо скана. Почему?
|
|||
|---|---|---|---|
|
#18+
invm, склоняюсь к мысли, что очень похоже на правду... "сиком" нашли первое вхождение искомой величины, а далее - (по сути) "сканим" индекс навигацией по двухсвязному списку листовых элементов индекса (как ни крути, но будет рэндж-скан). Так как кроме индексированного значение возвращать в результат селекта ничего не нужно, то лукапа на таблицу не возникает и "чисто механически" индекс-сик работает как индекс-скан. но зато сервер убил одним выстрелом двух зайцев - в случае, если прилетит параметр @p1 = 1 - для такого расклада вариант плана с сиком будет более чем кстати, в сравнении со сканом... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2018, 20:27 |
|
||
|
Поиск по индексу вместо скана. Почему?
|
|||
|---|---|---|---|
|
#18+
Щукина Анна, Я чистил процедурный кэш перед выполнением запроса, план все равно такой же. План во вложении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2018, 20:30 |
|
||
|
Поиск по индексу вместо скана. Почему?
|
|||
|---|---|---|---|
|
#18+
invm, Действительно, судя по свойству оператора идет скан диапазона. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2018, 20:32 |
|
||
|
Поиск по индексу вместо скана. Почему?
|
|||
|---|---|---|---|
|
#18+
Андрей_Батькович, Ещё раз перечитайте ссылку от invm-и и мой предыдущий пост. Вроде всё логично получается... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2018, 20:34 |
|
||
|
Поиск по индексу вместо скана. Почему?
|
|||
|---|---|---|---|
|
#18+
Щукина АннаАндрей_Батькович, Ещё раз перечитайте ссылку от invm-и и мой предыдущий пост. Вроде всё логично получается...это было в посту 21626238 , если что... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2018, 20:35 |
|
||
|
|

start [/forum/topic.php?fid=46&gotonew=1&tid=1689326]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
49ms |
get topic data: |
9ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 361ms |

| 0 / 0 |
