Имя: Пароль:
1C
1С v8
Почему СУБД использует Clustered Index Seek
, ,
0 Avalone2010
 
13.05.16
16:39
Здравствуйте! подскажите пожалуйста, есть вот такой запрос:

ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Номенклатура,
    ТоварыНаСкладахОстатки.Склад,
    ТоварыНаСкладахОстатки.ВНаличииОстаток,
    ТоварыНаСкладахОстатки.КОтгрузкеОстаток,
    "ТЕСТ" КАК Поле1
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад) КАК ТоварыНаСкладахОстатки

Измерения регистра:Номенклатура, Характеристика, Назначение,Склад. Склад не индексируемый.  
При выполнении этого запроса в профайлере смотрю его план запроса. Профайлер показывает что при обрашение к регистру идет  Clustered Index Seek. Почему? Ведь должен идти Scan. Или не должен?
1 Волшебник
 
модератор
13.05.16
16:40
всегда есть индекс по комбинации всех измерений
2 Avalone2010
 
13.05.16
16:41
ну тут он должен быть как Разделитьель + период + Номенклатура + характеристика + назначение + склад. Склад не индексируемый, поэтому индекса  Разделитьель + период + Склад + Изм1 + ... нет. В СУБД смотрю, там то же 1 индекс, тот который выше писал.
3 Волшебник
 
модератор
13.05.16
16:42
(2) это для таблицы остатков?
4 Avalone2010
 
13.05.16
16:43
да, таблица остатков(dbo._AccumRgT17162)
5 Serginio1
 
13.05.16
16:44
На начало периода он должен встать
6 Волшебник
 
модератор
13.05.16
16:44
Clustered Index Seek почти всегда лучше, чем Scan. Если только таблица не крошечная.
В чём проблема-то?
7 Serginio1
 
13.05.16
16:44
На первую запись периода
8 Волшебник
 
модератор
13.05.16
16:45
(7) здесь на последнюю
9 Serginio1
 
13.05.16
16:46
(8) На первую запись актуального периода
10 Avalone2010
 
13.05.16
16:47
Да нет проблем нет, просто не могу понять почему идет индекс сик ведь индекса то нет. в профайлере тест записи вот такой:
|--Clustered Index Seek(OBJECT:([ut].[dbo].[_AccumRgT17162].[_Accum17162_ByDims_TRRRRRR] AS [T2]), SEEK:([T2].[_Fld737]=[@P2] AND [T2].[_Period]=[@P3]),  WHERE:([ut100714].[dbo].[_AccumRgT17162].[_Fl.....

т.е. если я правильно понял там идет сеек по полям индекса а дальше where?
11 Avalone2010
 
13.05.16
16:49
Вопрос этот возник после прочтения статьи
"Типичные причины неоптимальной работы запросов и методы оптимизации" с ИТС. Захотелось посмотреть как оно реально выглядит, а выгляддит оно как то не так как я представлял.
12 Avalone2010
 
13.05.16
16:50
поле поиска для ВТ не входит ни в один из индексов, поэтому должен идти индекс скан, а идет индекс сик.
13 Дык ё
 
13.05.16
16:51
(10) сначала seek для поиска записей на точку актуальности ('39991101'), а дальше скан по условию where
14 Avalone2010
 
13.05.16
16:59
(13)Ок, понятно, примерно так и думал.Спасибо.
15 H A D G E H O G s
 
13.05.16
17:01
Там остатояный предикат поиска.
Смотрите планы надлежащим образом, тоесть через show xml plan
16 Avalone2010
 
13.05.16
17:02
(15) остатояный  = отстойный?
17 H A D G E H O G s
 
13.05.16
17:04
Остаточный

И да, этр не связано с остатками 1с.
Это термин СУБД
18 Serginio1
 
13.05.16
17:06
19 Serginio1
 
13.05.16
17:07
18+ Пожалуйста
20 Вуглускр1991
 
13.05.16
17:16
Виртуальная таблица - это соединение с подзапросом. Ты не в настоящую таблицу заглядываешь - поэтому "очевидный" вывод не применим. Далее (13)
21 Avalone2010
 
13.05.16
17:18
(20) не в настоящюю, но это не настоящая строится по настоящим у которых есть индексы и для которых задано условие поиска.
22 H A D G E H O G s
 
13.05.16
17:22
(20) виртуальная таблица без задания даты - самвя что ни наесть реальная