#0
by H A D G E H O G s
Простейший запрос: ВЫБРАТЬ РеализацияТоваровУслугТовары.Ссылка.Организация, Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары РегистрНакопления.ТоварыОрганизаций КАК ТоварыОрганизаций 2 запрос дает Clustered Index Scan по индексу: _Accum20481_ByPeriod_TRN, хотя в него не входит ни СерияНоменклатуры ни Организация из регистра накопления. Как так?! Вот план запроса: StmtText Hash Match(Right Semi Join, HASH:([T2].[_Q_000_F_000RRef], [T2].[_Q_000_F_001RRef])=([T1].[_Fld20482RRef], [T1].[_Fld20486RRef]), RESIDUAL:([Database].[dbo].[_AccumRg20481].[_Fld20482RRef] as [T1].[_Fld20482RRef]=[tempdb].[dbo].[#tt2].[_Q_000_F_000RRef] as [T2].[_Q_000_F_000RRef] AND [Database].[dbo].[_AccumRg20481].[_Fld20486RRef] as [T1].[_Fld20486RRef]=[tempdb].[dbo].[#tt2].[_Q_000_F_001RRef] as [T2].[_Q_000_F_001RRef]))
#0
by H A D G E H O G s
Простейший запрос: ВЫБРАТЬ РеализацияТоваровУслугТовары.Ссылка.Организация, Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары РегистрНакопления.ТоварыОрганизаций КАК ТоварыОрганизаций 2 запрос дает Clustered Index Scan по индексу: _Accum20481_ByPeriod_TRN, хотя в него не входит ни СерияНоменклатуры ни Организация из регистра накопления. Как так?! Вот план запроса: StmtText Hash Match(Right Semi Join, HASH:([T2].[_Q_000_F_000RRef], [T2].[_Q_000_F_001RRef])=([T1].[_Fld20482RRef], [T1].[_Fld20486RRef]), RESIDUAL:([Database].[dbo].[_AccumRg20481].[_Fld20482RRef] as [T1].[_Fld20482RRef]=[tempdb].[dbo].[#tt2].[_Q_000_F_000RRef] as [T2].[_Q_000_F_000RRef] AND [Database].[dbo].[_AccumRg20481].[_Fld20486RRef] as [T1].[_Fld20486RRef]=[tempdb].[dbo].[#tt2].[_Q_000_F_001RRef] as [T2].[_Q_000_F_001RRef]))
#4
by H A D G E H O G s
exec sp_executesql N'SELECT FROM _AccumRg20481 T1 WITH(NOLOCK) WHERE EXISTS(SELECT 1 FROM #tt2 T2 WITH(NOLOCK) WHERE (T1._Fld20482RRef = T2._Q_000_F_000RRef) AND (T1._Fld20486RRef = T2._Q_000_F_001RRef))',N' numeric',1
#19
by fisher
Да, прикольно... Может, оптимизатор запросов БД не обращает внимания на выбираемые поля?
#33
by Fragster
да, но он все равно вызывается для каждой строки внешнего запроса (т.е. таб. регистра)
#35
by fisher
Кластерный индекс вроде все поля содержит же. Те, по поля по которым строится - порядок определяют.
#41
by fisher
Тю. Я думал, вопрос был в том, почему не используется подходящий индекс, вместо скана таблицы.
#48
by H A D G E H O G s
sql построил хэш по 2-м полям и давай сканировать таблицу, но сканировать упорядоченно по кластерному индексу, так?
#53
by H A D G E H O G s
Как только в таблице имеется кластерный индекс, IAM более не используется для доступа к данным. IAM не исчезает вообще, но используется только для сопровождения таблицы как объекта в базе данных. Страницы данных взаимосвязаны и данные в них находятся в соответствии с кластерным индексом. Если выполнить запрос SELECT * FROM Customers без каких-либо условий WHERE, то система выполнить сканирование таблицы с использованием кластерного индекса. Эта операция очень похожа на простое сканирование таблицы. Главное различие между сканированием по кластерному индексу то, что результат сканирования вернется в порядке сортировки по кластерному индексу.
#58
by H A D G E H O G s
Вернемся к нашим песням. Смотрим типовые - на всех регистрах стоит индексированное измерение "Номенклатура", но неиндексированное "Серия". Логично. Но у меня есть регистр, который имеет измерение "Номенклатура" и "СерияНоменклатуры" (которое заполнено гораздо чаще чем в типовом случае). На данный момент индексированна "Номенклатура", но почти во всех запросах к регистру в условиях есть Номенклатура и Серия. Запросы скорее всего выполняют index seek nonclustered по индексу номенклатуры, а затем KeylookUp по физ. таблице по Серии. Если я добавлю индекс по серии - я не уверен, что оптимизатор выберет индекс по серии (но счаст попробую) и уверен, что запись будет медленней. И, как вариант - снять индекс с Номенклатуры и поставить на Серию. Что думаете?
#60
by Fragster
потому что типовой механизм индексирования не дает делать нормально составные индексы
#64
by H A D G E H O G s
Выбираю по серии и номенклатуре. Индексированна номенклатура - Clastered Index Scan Индексированна Серия - Index Seek+Lookup Индексированна Серия и Номенклатура - Index Seek (по индексу Серии)+Lookup
#65
by H A D G E H O G s
Почему в 1 случае SQL делает Index Scan, ведь у него индекс есть по номенклатуре!
#66
by H A D G E H O G s
Счаст попробую Первый случай, но отбирать буду только по номенклатуре, а в выборку включу Серию, Index Scan он мне сделает, или Index Seek по номенклатуре...
#67
by Fragster
1. оптимизатор решил, что использовать индекс по номенклатуре неоптимально, попробуй статистику обновить 2 и 3 - одинаково по сути, так как правильных составных индексов нету. но никто не мешает навешивать свои составные индексы (до реструктуризиции, правда)
#68
by H A D G E H O G s
Индексированна Серия. И ищем по Серии и Номенклатуре. Лишние lookup-ы будут только там, где серия пустая, зачем тут составной индекс (в индекс включать Номенклатуру).
#70
by H A D G E H O G s
Пардон, спешу добавить.... И мы не просто ищем серию и номенклатуру, но мы еще и Количество их берем :-)
#72
by Fragster
вообще - индексирована серия - значит составной индекс на серию, период, регистратор, номер строки.... - оптимизатор думает, что ну его нафиг, погляжу ка я всю таблицу...
#73
by H A D G E H O G s
Я не про то. Я про то, что Вот ищем мы Номенклатура Серия Лада Калина SQL найдет по индексу "Калина" идентификатор строки и слазит в таблицу проверить Лада это или нет. И заодно вытащит Количество. Все норм. Однозначно надо лезть в таблицу за количеством. Все норм. Вот ищем мы Номенклатура Серия SQL найдет по индексу "ПустаяСерия" идентификатор строки и слазит в таблицу проверить Жигулиэто или нет. А это не Жигули, а Камаз. Неудача. Тут бы составной индекс и пригодился.
#75
by H A D G E H O G s
Просто таких пустых серий У МЕНЯ будет мало. А вот типовые конфы универсальны, учет может быть и без серий, поэтому Серия и не индексированна.
#78
by H A D G E H O G s
Серию убираю, только номенклатура в Выборке - Index Seek без Lookup-а, но это то понятно.
#82
by H A D G E H O G s
Выбираю по серии и номенклатуре. 1) Индексированна номенклатура - Clastered Index Scan 2) Индексированна Серия - Index Seek+Lookup 3) Индексированна Серия и Номенклатура - Index Seek (по индексу Серии)+Lookup 1 случай, отбирать буду только по номенклатуре, а в выборку включаю Серию. Хочу IndexSeek + Lookup, получаю Clastered Index Scan (Table Scan) по факту.
#85
by H A D G E H O G s
Предлагаешь создать отдельный некластерный индекс только по полю Номенклатура, в SQL ?
#87
by Fragster
рестартани скуль, если есть возможность, и: SELECT TOP 10 FROM sys.dm_db_missing_index_groups g INNER JOIN sys.dm_db_missing_index_group_stats s ON s.group_handle = g.index_group_handle INNER JOIN sys.dm_db_missing_index_details d ON d.index_handle = g.index_handle ORDER BY [Total Cost] DESC;
#91
by H A D G E H O G s
СОздал чистый индекс по номенклатуре, не использует его никак, использует старый индекс с Регистратором и Периодом, и.т.д. Статистику обновил, что еще надо сделать?
#96
by H A D G E H O G s
Я конечно догадываюсь, что дело в селективности, но вроде номенклатура достаточно уникальна, надо глянуть.
#98
by H A D G E H O G s
Номенклатура была часто встречающаяся в регистре - и поэтому выбирался Index Scan, а потом уж отбор по серии - и в выборке у меня было мало записей, а когда отключил отбор по серии и тупо ее в выборке выводил - уже не обратил внимания на то, что там дофига записей.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
В этой группе 1С
- v8: почему УТ11 файловая тормозит по сети?
- Как удалить ячейку шапки в отчете СКД?
- Скидки в УТ10
- Рарус: Сельхозпредприятие. Бухгалтерский учет. ЕСХН
- Декларант Алко
- Автоматическое присвоение нового номера
- Позволяла ли Бух 7.7 редактировать проводки в документе?
- Как разрядить магнит?
- Внешняя печатная форма в УТ 11.0
- Как удалить кряк))
- Email CDO.Message через Microsoft Exchange
- Кнопка конфигуратор не активна (бухгалтерия предприятия 3.0).
- Управляемые формы - передача результатов запроса
- v7: ЗиК кадровое перемещение списком
- Внешняя печатная форма документа "Ведомость в банк"
- Почему не активны поля в документе периферийной базы
- Есть ли ДСВ-3 в 1С Бухгалтерии 2.0.46.8?
- глобальные переменные в 1С 8.2
- v7: как в 7.7 получить значение константы
- Таблица значений передать на клиент