Переключение на Главную Страницу Страницы: 1 2 [3] 4  ОтправитьПечать
Очень популярная тема (более 25 ответов) Доп. индексы на таблицы 1С (число прочтений - 11342 )
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Доп. индексы на таблицы 1С
Ответ #30 - 16. Апреля 2008 :: 17:21
Печать  
sadovnikov писал(а) 16. Апреля 2008 :: 14:26:
"К чему связь с ТЧ" - фильтр по количесву, сумме и т.д. Тоесть, по реквизитам ТЧ.

Хорошо. Допустим нам нужны строки ТЧ для доп.информации. Тогда такой тезис: реестры документов обычно строят за определенный период времени. Тогда если не использовать црдок то остается только журн. И я не могу представить запрос который бы эффективно использовал индекс по позиции журна совместно с доп.индексом ТЧ. Более эффективный чем запрос по црдок.

Цитата:
Во накинулись Улыбка
Не переживай. Я просто пытаюсь, с твоей помощью, построить цепь рассуждений для ответа на твой же вопрос: "А почему не прижилось?"

А насчет селективности. Имхо селективность индекса црдока по "нашей" графе отбора будет примерно так же кореллировать с количеством товаров и документов как и селективность доп.индекса для ТЧ.
  

1&&2&&3
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Доп. индексы на таблицы 1С
Ответ #31 - 17. Апреля 2008 :: 05:50
Печать  
trad
Давай еще чуток усложним ситуацию... В отчет отбираем документы с использованием фильра по:
- одному виду документов
- периоду
- общему реквизиту с галкой Отбор (допустим, Фирма)
- товару
доп. ревизит ТЧ задействовать не будем.
Рисуем запрос:

Select
     ЖурналДокументов.Date_Time_IDDOC
From
    ЖурналДокументов
    Left Join докЗаявкаНаСкладТЧ докЗаявкаТЧ On Right(ЖурналДокументов.Date_Time_IDDOC, 9) = докЗаявкаТЧ.IDDOC
Where
   ЖурналДокументов.Date_Time_IDDOC > @Начдата And ЖурналДокументов.Date_Time_IDDOC < @КонДатаПлюс1
   And ЖурналДокументов.Фирма = @идФирма
   And докЗаявкаТЧ.ТОвар = @идТовар
   And ЖурналДокументов.IdDocDef = 998

Потом строим индекс:
CREATE  UNIQUE  INDEX [_DT998] ON [dbo].[DT998]([IDDOC], SP1002) ON [PRIMARY]

DT998 - документ ЗаявкаНаСклад, SP1002 - товар.

Чуток подправляем запрос:

Select
     ЖурналДокументов.Date_Time_IDDOC
From
    ЖурналДокументов
    Left Join докЗаявкаНаСкладТЧ докЗаявкаТЧ On докЗаявкаТЧ.IDDOC = Right(ЖурналДокументов.Date_Time_IDDOC, 9) And докЗаявкаТЧ.ТОвар = @идТовар
Where
   ЖурналДокументов.Date_Time_IDDOC > @Начдата And ЖурналДокументов.Date_Time_IDDOC < @КонДатаПлюс1
   And ЖурналДокументов.Фирма = @идФирма
   And ЖурналДокументов.IdDocDef = 998

И, блин, не видим никакого ускорения Печаль
Слишком мало строк приходится на связывание с докЗаявкаНаСкладТЧ.

ИМХО, использование _1SCRDOC в данном случае только снизит скорость выполнения запроса.
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Доп. индексы на таблицы 1С
Ответ #32 - 17. Апреля 2008 :: 06:11
Печать  
Еще немного выскажусь.
Помимо создания своих индексов, очень хочется иметь возможность удалять те, которые создала 1С-ка...
Тогда бы можно было спокойно комментарию (общий реквизит) ставить галку Отбор и грохнуть индекс по нему. А не городить для комментария отдельную табличку, дублируя информацию в базе.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Доп. индексы на таблицы 1С
Ответ #33 - 17. Апреля 2008 :: 06:34
Печать  
Цитата:
И, блин, не видим никакого ускорения 
Слишком мало строк приходится на связывание с докЗаявкаНаСкладТЧ.

И что получается. Доп.индекс пезполезен?
  

1&&2&&3
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Доп. индексы на таблицы 1С
Ответ #34 - 17. Апреля 2008 :: 06:37
Печать  
trad писал(а) 17. Апреля 2008 :: 06:34:
И что получается. Доп.индекс пезполезен?


В данном случае - да Печаль
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Доп. индексы на таблицы 1С
Ответ #35 - 17. Апреля 2008 :: 06:46
Печать  
Цитата:
ИМХО, использование _1SCRDOC в данном случае только снизит скорость выполнения запроса.

а у тебя есть возможность проверить?
Цитата:
Select
     cd.Child_Date_Time_IDDOC
From _1scrdoc cd (nolock)
Inner Join _1sjourn j (nolock) on j.IdDocDef = 998 And j.Date_Time_IDDOC = cd.Child_Date_Time_IDDOC
Where cd.mdid = $ГрафаОтбора.ПоТоварам
   And cd.parentval = @идПолныйТовар
   And cd.Child_Date_Time_IDDOC > @Начдата And cd.Date_Time_IDDOC < @КонДатаПлюс1
   And $ОбщийРеквизит.Фирма = @идФирма
   
order by cd.Child_Date_Time_IDDOC
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Доп. индексы на таблицы 1С
Ответ #36 - 17. Апреля 2008 :: 06:50
Печать  
sadovnikov писал(а) 17. Апреля 2008 :: 06:37:
trad писал(а) 17. Апреля 2008 :: 06:34:
И что получается. Доп.индекс пезполезен?


В данном случае - да Печаль

вот и я считаю что индекс (ИДДок,Ревизит) для ТЧ малополезен при наличии PK начинающегося с ИДДок
  

1&&2&&3
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Доп. индексы на таблицы 1С
Ответ #37 - 17. Апреля 2008 :: 07:24
Печать  
Честно говоря, я в некотором офигивании...
Вот запросы:

Declare @идПолныйТовар Char(23), @Начдата Char(8), @КонДатаПлюс1 Char(8), @идФирма Char(9), @идТовар Char(9)
Set @идПолныйТовар = 'B1   C     9           '
Set @идТовар = '     9   '
Set @Начдата = '20070201'
Set @КонДатаПлюс1 = '20070301'
Set @идФирма = '     3   '

Select
     cd.Child_Date_Time_IDDOC
From
     _1scrdoc cd (nolock)
     Inner Join ЖурналДокументов j (nolock) on j.IdDocDef = 998 And j.Date_Time_IDDOC = cd.Child_Date_Time_IDDOC
Where
     cd.mdid = 3555
     And cd.parentval = @идПолныйТовар
     And cd.Child_Date_Time_IDDOC > @Начдата And cd.Child_Date_Time_IDDOC < @КонДатаПлюс1
     And j.Фирма = @идФирма
--order by cd.Child_Date_Time_IDDOC



Select
     ЖурналДокументов.Date_Time_IDDOC
From 
    ЖурналДокументов
    Left Join докЗаявкаНаСкладТЧ докЗаявкаТЧ On Right(ЖурналДокументов.Date_Time_IDDOC, 9) = докЗаявкаТЧ.IDDOC
Where
   ЖурналДокументов.Date_Time_IDDOC > @Начдата And ЖурналДокументов.Date_Time_IDDOC < @КонДатаПлюс1
   And ЖурналДокументов.Фирма = @идФирма
   And докЗаявкаТЧ.ТОвар = @идТовар
   And ЖурналДокументов.IdDocDef = 998

План выполнения - во вложении...
  

Plan.bmp ( 196 KB | Загрузки )
Plan.bmp
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Доп. индексы на таблицы 1С
Ответ #38 - 17. Апреля 2008 :: 07:26
Печать  
Select Count(*) From _1SJOURN (NoLock)   =    246 152
Select Count(*) From _1SCRDOC (NoLock)  = 1 265 483
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Доп. индексы на таблицы 1С
Ответ #39 - 17. Апреля 2008 :: 07:38
Печать  
первый план вполне нарядный  Очень довольный
и каков результат(вывод): отбор vs доп.индекс?
  

1&&2&&3
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Доп. индексы на таблицы 1С
Ответ #40 - 17. Апреля 2008 :: 07:40
Печать  
trad писал(а) 17. Апреля 2008 :: 07:38:
первый план вполне нарядный  Очень довольный
и каков результат(вывод): отбор vs доп.индекс?


Так на плане видно, какой вывод...
Все, пересматриваю свое отношения к графам отбора...
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Доп. индексы на таблицы 1С
Ответ #41 - 17. Апреля 2008 :: 07:44
Печать  
если по общему реквизиту Фирма есть отбор, то можно еще несколько оптимизировать мой запрос и избавиться от лукапа.
Select  
    cd.Child_Date_Time_IDDOC  
From  
    _1scrdoc cd (nolock)  
    Inner Join ЖурналДокументов j (nolock) on j.IdDocDef = 998 And j.Date_Time_IDDOC = cd.Child_Date_Time_IDDOC  
    Inner Join ЖурналДокументов j2 (nolock) on j2.Фирма = @идФирма And j.Date_Time_IDDOC = cd.Child_Date_Time_IDDOC  
Where  
    cd.mdid = 3555
    And cd.parentval = @идПолныйТовар  
    And cd.Child_Date_Time_IDDOC > @Начдата And cd.Child_Date_Time_IDDOC < @КонДатаПлюс1  
--order by cd.Child_Date_Time_IDDOC
  

1&&2&&3
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Доп. индексы на таблицы 1С
Ответ #42 - 17. Апреля 2008 :: 07:46
Печать  
trad писал(а) 17. Апреля 2008 :: 07:44:
если по общему реквизиту Фирма есть отбор, то можно еще несколько оптимизировать мой запрос и избавиться от лукапа.


В частном случае - да. Но в реальной жизни высе равно придется что-нибудь из журнала выковыривать: контрагента, признак проведения и т.д.
А, так как запросы формируются динамически, то фиг за всем уследишь...
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Доп. индексы на таблицы 1С
Ответ #43 - 17. Апреля 2008 :: 07:48
Печать  
trad писал(а) 17. Апреля 2008 :: 07:44:
если по общему реквизиту Фирма есть отбор...


Кстати, а куда бы он (отбор) нафиг делся-то? Иначе бы колонки не было в _1SJOURN  Подмигивание
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Доп. индексы на таблицы 1С
Ответ #44 - 17. Апреля 2008 :: 07:49
Печать  
Позволю себе резюмировать, еще раз отвечая на вопрос: "А почему не прижилось?".
Передо мной не вставало таких задачь, для эффективного (приемлимого) решения которых, было бы не достаточно штатных средств оптимизации БД и было бы крайне необходимо прибегать к доп.индексам.
  

1&&2&&3
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 [3] 4 
ОтправитьПечать