Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Индексы + Where Not in  [new]
relief
Member

Откуда:
Сообщений: 1197
Привет

Есть табличка Cities с таким запросом

Select Name, Population 
From Cities 
Where Name NOT IN (...)


если создавать index (name) include (population) то он не используется.
какой надо создавать индекс?
11 июн 15, 11:09    [17758904]     Ответить | Цитировать Сообщить модератору
 Re: Индексы + Where Not in  [new]
Glory
Member

Откуда:
Сообщений: 104751
relief
если создавать index (name) include (population) то он не используется.
какой надо создавать индекс?

А зачем для поиска в другой таблице нужен индекс по Cities ?
11 июн 15, 11:13    [17758937]     Ответить | Цитировать Сообщить модератору
 Re: Индексы + Where Not in  [new]
Добрый Э - Эх
Guest
relief,
на NOT IN индекс и не должен использоваться. попробуй переделать запрос в форму NOT EXISTS
11 июн 15, 11:15    [17758959]     Ответить | Цитировать Сообщить модератору
 Re: Индексы + Where Not in  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21053
А насколько селективно условие отбора NOT IN? если отбирается более 20% записей, то использование индекса невыгодно...
Или попробуйте сделать его составным покрывающим, без инклюда.
11 июн 15, 11:16    [17758973]     Ответить | Цитировать Сообщить модератору
 Re: Индексы + Where Not in  [new]
o-o
Guest
если в таблице 100 городов, то никакой индекс не будет использоваться.
to Glory:
почему в другой таблице, у него наверняка списком города перечислены
11 июн 15, 11:16    [17758974]     Ответить | Цитировать Сообщить модератору
 Re: Индексы + Where Not in  [new]
Glory
Member

Откуда:
Сообщений: 104751
o-o
to Glory:
почему в другой таблице, у него наверняка списком города перечислены

Тогда тем более индекс не поможет
Потому что это куча OR
11 июн 15, 11:20    [17759003]     Ответить | Цитировать Сообщить модератору
 Re: Индексы + Where Not in  [new]
iap
Member

Откуда: Москва
Сообщений: 47063
Добрый Э - Эх
relief,
на NOT IN индекс и не должен использоваться. попробуй переделать запрос в форму NOT EXISTS
В NOT IN()-то, небось, просто список значений?
11 июн 15, 11:28    [17759064]     Ответить | Цитировать Сообщить модератору
 Re: Индексы + Where Not in  [new]
o-o
Guest
ответ сразу обоим, Glory и Добрый Э - Эх.
специально для вас смоделировано.
не скажу, что частый/нормальный случай, но что угодно бывает

К сообщению приложен файл. Размер - 74Kb
11 июн 15, 11:31    [17759088]     Ответить | Цитировать Сообщить модератору
 Re: Индексы + Where Not in  [new]
Glory
Member

Откуда:
Сообщений: 104751
o-o
ответ сразу обоим, Glory и Добрый Э - Эх.
специально для вас смоделировано.

Хорошая модель. С одним значением в IN даже еще лучше
11 июн 15, 11:32    [17759093]     Ответить | Цитировать Сообщить модератору
 Re: Индексы + Where Not in  [new]
0-0
Guest
Glory
o-o
to Glory:
почему в другой таблице, у него наверняка списком города перечислены

Тогда тем более индекс не поможет
Потому что это куча OR


Там же Not in, а это куча AND, а не OR.
11 июн 15, 11:36    [17759124]     Ответить | Цитировать Сообщить модератору
 Re: Индексы + Where Not in  [new]
Glory
Member

Откуда:
Сообщений: 104751
0-0
Glory
пропущено...

Тогда тем более индекс не поможет
Потому что это куча OR


Там же Not in, а это куча AND, а не OR.

А есть разница ? Как в одиночном поиске обработать сразу все НЕравно ? Или все Равно ?
11 июн 15, 11:38    [17759140]     Ответить | Цитировать Сообщить модератору
 Re: Индексы + Where Not in  [new]
o-o
Guest
те, кто сперва говорит,
этого не может быть, потому что не может быть никогда,
а если им показываешь ситуацию, сразу на попятную -- стрелочники.
переводите-переводите.

relief,
вам слабО было весь запрос показать, чтоб людям не приходилось отгадывать, подселект ли у вас там,
значения ли, сколько их, сколько строк в исходной таблице и сколько РАЗЛИЧНЫХ значений городов?
11 июн 15, 11:43    [17759182]     Ответить | Цитировать Сообщить модератору
 Re: Индексы + Where Not in  [new]
invm
Member

Откуда: Москва
Сообщений: 9687
http://blogs.msdn.com/b/craigfr/archive/2006/07/07/652668.aspx
For example, suppose we have a single column index on a column “a.” We can use this index to seek on these predicates:

  • a = 3.14
  • a > 100
  • a between 0 and 99
  • a like ‘abc%’
  • a in (2, 3, 5, 7)
  • 11 июн 15, 11:46    [17759203]     Ответить | Цитировать Сообщить модератору
     Re: Индексы + Where Not in  [new]
    Glory
    Member

    Откуда:
    Сообщений: 104751
    o-o
    те, кто сперва говорит,
    этого не может быть, потому что не может быть никогда,
    а если им показываешь ситуацию, сразу на попятную -- стрелочники.
    переводите-переводите.

    Что вы тогда нет объясните ТС-у, почему его index (name) include (population) не используется ?
    11 июн 15, 11:46    [17759204]     Ответить | Цитировать Сообщить модератору
     Re: Индексы + Where Not in  [new]
    relief
    Member

    Откуда:
    Сообщений: 1197
    iap
    Добрый Э - Эх
    relief,
    на NOT IN индекс и не должен использоваться. попробуй переделать запрос в форму NOT EXISTS
    В NOT IN()-то, небось, просто список значений?


    да. именно список значений
    11 июн 15, 11:47    [17759219]     Ответить | Цитировать Сообщить модератору
     Re: Индексы + Where Not in  [new]
    o-o
    Guest
    Glory
    o-o
    ответ сразу обоим, Glory и Добрый Э - Эх.
    специально для вас смоделировано.

    Хорошая модель. С одним значением в IN даже еще лучше

    так лучше?
    ладно, все, ниочемная тема, фу-фу-фу

    К сообщению приложен файл. Размер - 75Kb
    11 июн 15, 11:49    [17759228]     Ответить | Цитировать Сообщить модератору
     Re: Индексы + Where Not in  [new]
    relief
    Member

    Откуда:
    Сообщений: 1197
    o-o

    relief,
    вам слабО было весь запрос показать, чтоб людям не приходилось отгадывать, подселект ли у вас там,
    значения ли, сколько их, сколько строк в исходной таблице и сколько РАЗЛИЧНЫХ значений городов?


    create table Cities 
    (
     name nvarchar(100),
     Population int
    )
    create nonclustered index ix_city on Cities(name) include (population)
    
    в таблицу заливается 100К городов
    
    Select Name, Population 
    From Cities 
    Where Name NOT IN (список из 100 городов)
    
    11 июн 15, 11:50    [17759238]     Ответить | Цитировать Сообщить модератору
     Re: Индексы + Where Not in  [new]
    Glory
    Member

    Откуда:
    Сообщений: 104751
    o-o
    так лучше?
    ладно, все, ниочемная тема, фу-фу-фу

    Вы ТС это лучше свои картинки показывайте. Или его серверу. Вдруг он раскаится и начнет использовать индекс
    11 июн 15, 11:51    [17759242]     Ответить | Цитировать Сообщить модератору
     Re: Индексы + Where Not in  [new]
    o-o
    Guest
    Glory
    o-o
    те, кто сперва говорит,
    этого не может быть, потому что не может быть никогда,
    а если им показываешь ситуацию, сразу на попятную -- стрелочники.
    переводите-переводите.

    Что вы тогда нет объясните ТС-у, почему его index (name) include (population) не используется ?

    потому, что он не отвечает на мои вопросы.
    мне проще его конкретную ситуацию обсудить, чем перебрать 1000 возможных.
    я знаю свое распределение данных, оно было изначально не таким,
    и таблица для другого, но вот для этой темы пришлось "правильно" проапдэйтить
    и вот оно, индекс index (val) include (dt) используется.
    а было так, что, разумеется, не использовался.
    11 июн 15, 11:54    [17759262]     Ответить | Цитировать Сообщить модератору
     Re: Индексы + Where Not in  [new]
    Glory
    Member

    Откуда:
    Сообщений: 104751
    o-o
    потому, что он не отвечает на мои вопросы.

    Круто. Т.е. правильный план строится только на тех серверах, администраторы которых отвечают на ваши вопросы ?
    11 июн 15, 11:56    [17759279]     Ответить | Цитировать Сообщить модератору
     Re: Индексы + Where Not in  [new]
    o-o
    Guest
    relief
    o-o

    relief,
    вам слабО было весь запрос показать, чтоб людям не приходилось отгадывать, подселект ли у вас там,
    значения ли, сколько их, сколько строк в исходной таблице и сколько РАЗЛИЧНЫХ значений городов?


    create table Cities 
    (
     name nvarchar(100),
     Population int
    )
    create nonclustered index ix_city on Cities(name) include (population)
    
    в таблицу заливается 100К городов
    
    Select Name, Population 
    From Cities 
    Where Name NOT IN (список из 100 городов)
    

    ok,
    a где ответ на вопрос, сколько из этих 100К городов различны?
    сколько строк вам возвращает запрос, те же 100К или однy?
    если у вас всего 2 различных города в самой таблице,
    или в списке из 100 городов вообще нет ни одного из тех, что в таблице,
    возвращать все равно надо все.

    ..a актуальный план бы на все ответил
    11 июн 15, 12:01    [17759316]     Ответить | Цитировать Сообщить модератору
     Re: Индексы + Where Not in  [new]
    MasterZiv
    Member

    Откуда: Питер
    Сообщений: 34687
    relief
    Привет

    Есть табличка Cities с таким запросом

    Select Name, Population 
    From Cities 
    Where Name NOT IN (...)
    


    если создавать index (name) include (population) то он не используется.
    какой надо создавать индекс?



    не всегда, когда есть индекс, он должен использоваться.

    конкретно тут, если в IN константы и их мало (скажем, 20), то СУБД может применить OR стратегию, и использовать индекс. Если там подзапрос , и он дает мало записей, и сервер об этом знает, то запрос можно расписать под антиджойн, и тоже применить этот индекс.

    в остальных случаях индекс не канает.
    11 июн 15, 12:02    [17759321]     Ответить | Цитировать Сообщить модератору
     Re: Индексы + Where Not in  [new]
    Glory
    Member

    Откуда:
    Сообщений: 104751
    o-o
    ..a актуальный план бы на все ответил

    Вы бы для начала в своем примере использовали поля тех типов, что и у ТС
    11 июн 15, 12:03    [17759333]     Ответить | Цитировать Сообщить модератору
     Re: Индексы + Where Not in  [new]
    o-o
    Guest
    Glory
    o-o
    потому, что он не отвечает на мои вопросы.

    Круто. Т.е. правильный план строится только на тех серверах, администраторы которых отвечают на ваши вопросы ?

    граждане, вы все слышали?
    любой вопрос на этом форуме отныне расценивается не как попытка получить доп. инфо о ситуации,
    но как попытка повлиять дистанционно на выбор планов оптимизаторами чужих серверов.
    я лучше пережду фазу шарики за ролики, надеюсь, это временно
    11 июн 15, 12:05    [17759344]     Ответить | Цитировать Сообщить модератору
     Re: Индексы + Where Not in  [new]
    Glory
    Member

    Откуда:
    Сообщений: 104751
    o-o
    граждане, вы все слышали?
    любой вопрос на этом форуме отныне расценивается не как попытка получить доп. инфо о ситуации,
    но как попытка повлиять дистанционно на выбор планов оптимизаторами чужих серверов.
    я лучше пережду фазу шарики за ролики, надеюсь, это временно

    П..деть, не мешки ворочать (с) народная мудрость
    11 июн 15, 12:07    [17759354]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
    Все форумы / Microsoft SQL Server Ответить