|
Почему СУБД использует 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) виртуальная таблица без задания даты - самвя что ни наесть реальная
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |