Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 3 вперед Ctrl→ все |
relief Member Откуда: Сообщений: 1197 |
Привет Есть табличка Cities с таким запросом Select Name, Population From Cities Where Name NOT IN (...) если создавать index (name) include (population) то он не используется. какой надо создавать индекс? |
11 июн 15, 11:09 [17758904] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
А зачем для поиска в другой таблице нужен индекс по Cities ? |
||
11 июн 15, 11:13 [17758937] Ответить | Цитировать Сообщить модератору |
Добрый Э - Эх
Guest |
relief, на NOT IN индекс и не должен использоваться. попробуй переделать запрос в форму NOT EXISTS |
11 июн 15, 11:15 [17758959] Ответить | Цитировать Сообщить модератору |
Akina Member Откуда: Зеленоград, Москва, Россия Сообщений: 21053 |
А насколько селективно условие отбора NOT IN? если отбирается более 20% записей, то использование индекса невыгодно... Или попробуйте сделать его составным покрывающим, без инклюда. |
11 июн 15, 11:16 [17758973] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
если в таблице 100 городов, то никакой индекс не будет использоваться. to Glory: почему в другой таблице, у него наверняка списком города перечислены |
11 июн 15, 11:16 [17758974] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Тогда тем более индекс не поможет Потому что это куча OR |
||
11 июн 15, 11:20 [17759003] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47063 |
|
||
11 июн 15, 11:28 [17759064] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
ответ сразу обоим, Glory и Добрый Э - Эх. специально для вас смоделировано. не скажу, что частый/нормальный случай, но что угодно бывает К сообщению приложен файл. Размер - 74Kb |
11 июн 15, 11:31 [17759088] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Хорошая модель. С одним значением в IN даже еще лучше |
||
11 июн 15, 11:32 [17759093] Ответить | Цитировать Сообщить модератору |
0-0
Guest |
Там же Not in, а это куча AND, а не OR. |
||||
11 июн 15, 11:36 [17759124] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
А есть разница ? Как в одиночном поиске обработать сразу все НЕравно ? Или все Равно ? |
||||
11 июн 15, 11:38 [17759140] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
те, кто сперва говорит, этого не может быть, потому что не может быть никогда, а если им показываешь ситуацию, сразу на попятную -- стрелочники. переводите-переводите. relief, вам слабО было весь запрос показать, чтоб людям не приходилось отгадывать, подселект ли у вас там, значения ли, сколько их, сколько строк в исходной таблице и сколько РАЗЛИЧНЫХ значений городов? |
11 июн 15, 11:43 [17759182] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9687 |
|
||
11 июн 15, 11:46 [17759203] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Что вы тогда нет объясните ТС-у, почему его index (name) include (population) не используется ? |
||
11 июн 15, 11:46 [17759204] Ответить | Цитировать Сообщить модератору |
relief Member Откуда: Сообщений: 1197 |
да. именно список значений |
||||
11 июн 15, 11:47 [17759219] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
так лучше? ладно, все, ниочемная тема, фу-фу-фу К сообщению приложен файл. Размер - 75Kb |
||||
11 июн 15, 11:49 [17759228] Ответить | Цитировать Сообщить модератору |
relief Member Откуда: Сообщений: 1197 |
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] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Вы ТС это лучше свои картинки показывайте. Или его серверу. Вдруг он раскаится и начнет использовать индекс |
||
11 июн 15, 11:51 [17759242] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
потому, что он не отвечает на мои вопросы. мне проще его конкретную ситуацию обсудить, чем перебрать 1000 возможных. я знаю свое распределение данных, оно было изначально не таким, и таблица для другого, но вот для этой темы пришлось "правильно" проапдэйтить и вот оно, индекс index (val) include (dt) используется. а было так, что, разумеется, не использовался. |
||||
11 июн 15, 11:54 [17759262] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Круто. Т.е. правильный план строится только на тех серверах, администраторы которых отвечают на ваши вопросы ? |
||
11 июн 15, 11:56 [17759279] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
ok, a где ответ на вопрос, сколько из этих 100К городов различны? сколько строк вам возвращает запрос, те же 100К или однy? если у вас всего 2 различных города в самой таблице, или в списке из 100 городов вообще нет ни одного из тех, что в таблице, возвращать все равно надо все. ..a актуальный план бы на все ответил |
||||
11 июн 15, 12:01 [17759316] Ответить | Цитировать Сообщить модератору |
MasterZiv Member Откуда: Питер Сообщений: 34687 |
не всегда, когда есть индекс, он должен использоваться. конкретно тут, если в IN константы и их мало (скажем, 20), то СУБД может применить OR стратегию, и использовать индекс. Если там подзапрос , и он дает мало записей, и сервер об этом знает, то запрос можно расписать под антиджойн, и тоже применить этот индекс. в остальных случаях индекс не канает. |
||
11 июн 15, 12:02 [17759321] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Вы бы для начала в своем примере использовали поля тех типов, что и у ТС |
||
11 июн 15, 12:03 [17759333] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
граждане, вы все слышали? любой вопрос на этом форуме отныне расценивается не как попытка получить доп. инфо о ситуации, но как попытка повлиять дистанционно на выбор планов оптимизаторами чужих серверов. я лучше пережду фазу шарики за ролики, надеюсь, это временно |
||||
11 июн 15, 12:05 [17759344] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
П..деть, не мешки ворочать (с) народная мудрость |
||
11 июн 15, 12:07 [17759354] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 3 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |