|
запрос медленно работает | ☑ | ||
---|---|---|---|---|
0
novichok79
26.03.13
✎
06:05
|
доброго утра всем!
имеется след. запрос: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | СвойстваОбъектов.Ссылка КАК Свойство, | СвойстваОбъектов.Наименование КАК СвойствоНаименование |ПОМЕСТИТЬ ВТСписокСвойств |ИЗ | ПланВидовХарактеристик.СвойстваОбъектов КАК СвойстваОбъектов |ГДЕ | СвойстваОбъектов.НазначениеСвойства = ЗНАЧЕНИЕ(ПланВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Номенклатура) | |ИНДЕКСИРОВАТЬ ПО | Свойство |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ | ЗначенияСвойствОбъектов.Свойство КАК Свойство, | ЗначенияСвойствОбъектов.Значение КАК ЗначениеСвойства |ПОМЕСТИТЬ ВТЗначенияСвойств |ИЗ | РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов |ГДЕ | (ВЫРАЗИТЬ(ЗначенияСвойствОбъектов.Объект КАК Справочник.Номенклатура)) = &Номенклатура | |ИНДЕКСИРОВАТЬ ПО | Свойство |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | СписокСвойств.Свойство КАК Свойство, | СписокСвойств.СвойствоНаименование КАК СвойствоНаименование, | ""ПВХ_"" + СписокСвойств.СвойствоНаименование КАК СвойствоПредставление, | ЕСТЬNULL(ЗначенияСвойств.ЗначениеСвойства, ЗНАЧЕНИЕ(Справочник.ЗначенияСвойствОбъектов.ПустаяСсылка)) КАК ЗначениеСвойства, | ВЫБОР | КОГДА НЕ ЗначенияСвойств.Свойство ЕСТЬ NULL | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК ЗначениеНайдено |ИЗ | ВТСписокСвойств КАК СписокСвойств | ЛЕВОЕ СОЕДИНЕНИЕ ВТЗначенияСвойств КАК ЗначенияСвойств | ПО СписокСвойств.Свойство = ЗначенияСвойств.Свойство"; Запрос.УстановитьПараметр("Номенклатура", Номенклатура); на 1 позицию ТМЦ уходит 1 секунда - пожалуйста подскажите, в чем может быть причина медленной работы этого простого запроса? база файловая УТ 10.3, в справочнике Номенклатура 19380 позиций, в регистре ЗначенияСвойствОбъектов 197230 записей. заранее благодарю за помощь. |
|||
1
Андрюха
26.03.13
✎
06:10
|
(0) убирай из запроса по кусочку, постепенно наткнёшься на тот блок, который тормозит
|
|||
2
novichok79
26.03.13
✎
06:13
|
как я и думал - это таблица ВТЗначенияСвойств
|
|||
3
novichok79
26.03.13
✎
06:18
|
убрал ВТ, вместо 1,6 сек запрос выполняется 3,2 сек... весело однако
|
|||
4
Михаил 1С
26.03.13
✎
06:18
|
Слушай, может быть попробуй убрать "Выразить" из
(ВЫРАЗИТЬ(ЗначенияСвойствОбъектов.Объект КАК Справочник.Номенклатура)) = &Номенклатура Напиши просто ЗначенияСвойствОбъектов.Объект = &Номенклатура |
|||
5
novichok79
26.03.13
✎
06:20
|
(4) браво! 0,005 сек вместо 1,6 сек
|
|||
6
Михаил 1С
26.03.13
✎
06:23
|
Хорошо. Я тебя поздравляю. Значит, в остальном запрос был написан верно.
|
|||
7
novichok79
26.03.13
✎
06:26
|
(6) спасибо за помощь...
|
|||
8
Михаил 1С
26.03.13
✎
06:33
|
(7) Приятно было помочь, моя гордость и самомнение от этого выросли! :)
Я уже не только в мелочи могу помочь, я уже могу разобрать Запрос! :) Хотяа, это был не сложный случай. |
|||
9
H A D G E H O G s
26.03.13
✎
08:48
|
(5) Следующий раз он отработает с теми жа 1.5 секундами.
|
|||
10
H A D G E H O G s
26.03.13
✎
08:49
|
ГДЕ (ВЫРАЗИТЬ(ЗначенияСвойствОбъектов.Объект КАК Справочник.Номенклатура)) = &Номенклатура
здесь ни на что не влияет. |
|||
11
kotletka
26.03.13
✎
09:02
|
(10)Влияет
|
|||
12
ДенисЧ
26.03.13
✎
09:03
|
(10) (11) каккие фаши доказзаттельстааа? (с)
|
|||
13
1Сергей
26.03.13
✎
09:03
|
(11) в данном случае
| (ВЫРАЗИТЬ(ЗначенияСвойствОбъектов.Объект КАК Справочник.Номенклатура)) = &Номенклатура и | ЗначенияСвойствОбъектов.Объект = &Номенклатура разница только в производительности |
|||
14
Domanoff26
26.03.13
✎
09:05
|
я раньше думал что через выразить наоборот быстрее работает
|
|||
15
Fragster
гуру
26.03.13
✎
09:07
|
(14) а ты думал, во что твой запрос превращается? и почему "от выразить быстрее" в некоторых случаях, а в твоем - нет?
|
|||
16
Fragster
гуру
26.03.13
✎
09:08
|
зачем нужны индексы?
|
|||
17
Fragster
гуру
26.03.13
✎
09:08
|
какие индексы создает 1с
|
|||
18
Fragster
гуру
26.03.13
✎
09:08
|
про планы выполнения
|
|||
19
Fragster
гуру
26.03.13
✎
09:08
|
а еще - в (0) запрос в цикле, наверняка
|
|||
20
H A D G E H O G s
26.03.13
✎
09:11
|
(14) Не в этом случае.
(17) Почти уверен, что и с выразить будет использоваться индекс. |
|||
21
kotletka
26.03.13
✎
09:13
|
(13)про производительность и говорми
|
|||
22
ЧеловекДуши
26.03.13
✎
09:14
|
Может характеристики получать вот по подобию?
ВЫБРАТЬ Контрагенты.Ссылка КАК Контрагенты ИЗ Справочник.Контрагенты КАК Контрагенты ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "Всего" {ХАРАКТЕРИСТИКИ ТИП(Справочник.Контрагенты) СПИСОК (ВЫБРАТЬ СвойстваОбъектов.Ссылка, СвойстваОбъектов.Наименование, СвойстваОбъектов.ТипЗначения ИЗ ПланВидовХарактеристик.СвойстваОбъектов КАК СвойстваОбъектов ГДЕ СвойстваОбъектов.НазначениеСвойства.Код = "00000000101") ИДЕНТИФИКАТОР Ссылка ИМЯ Наименование ТИПЗНАЧЕНИЯ ТипЗначения ЗНАЧЕНИЯ РегистрСведений.ЗначенияСвойствОбъектов ОБЪЕКТ Объект ХАРАКТЕРИСТИКА Свойство ЗНАЧЕНИЕ Значение } |
|||
23
Domanoff26
26.03.13
✎
09:16
|
(15) это не мой запрос - просто интересуюсь, а в каких выразить быстрее , а в каких медленнее ?насколько я понимаю здесь составной тип, вот он и выражает нет...я именно так понимал оптимизацию запроса в данном контексте
|
|||
24
Fragster
гуру
26.03.13
✎
09:17
|
(20) не, там индекс начинается с TREF :)
|
|||
25
H A D G E H O G s
26.03.13
✎
09:22
|
(24) Индекс!
StmtText -------- Nested Loops(Inner Join, OUTER REFERENCES:([T1].[_Fld16423_TYPE], [T1].[_Fld16423_RTRef], [T1].[_Fld16423_RRRef], [T1].[_Fld16424RRef])) |--Index Scan(OBJECT:([KATAP].[dbo].[_InfoRg16422].[_InfoR16422_ByDims16426_RR] AS [T1]), WHERE:(CASE WHEN [KATAP].[dbo].[_InfoRg16422].[_Fld16423_TYPE] as [T1].[_Fld16423_TYPE]=[@P1] AND [KATAP].[dbo].[_InfoRg16422].[_Fld16423_RTRef] as [T1].[_Fld16423_RTRef]=[@P2] THEN [KATAP].[dbo].[_InfoRg16422].[_Fld16423_RRRef] as [T1].[_Fld16423_RRRef] ELSE NULL END=[@P3])) |--Clustered Index Seek(OBJECT:([KATAP].[dbo].[_InfoRg16422].[_InfoR16422_ByDims_RR] AS [T1]), SEEK:([T1].[_Fld16423_TYPE]=[KATAP].[dbo].[_InfoRg16422].[_Fld16423_TYPE] as [T1].[_Fld16423_TYPE] AND [T1].[_Fld16423_RTRef]=[KATAP].[dbo].[_InfoRg16422].[_Fld16423_RTRef] as [T1].[_Fld16423_RTRef] AND [T1].[_Fld16423_RRRef]=[KATAP].[dbo].[_InfoRg16422].[_Fld16423_RRRef] as [T1].[_Fld16423_RRRef] AND [T1].[_Fld16424RRef]=[KATAP].[dbo].[_InfoRg16422].[_Fld16424RRef] as [T1].[_Fld16424RRef]) LOOKUP ORDERED FORWARD) |
|||
26
H A D G E H O G s
26.03.13
✎
09:26
|
(24) Другой вопрос, что без Выразить будет просто
StmtText -------- Clustered Index Seek(OBJECT:([KATAP].[dbo].[_InfoRg16422].[_InfoR16422_ByDims_RR] AS [T1]), SEEK:([T1].[_Fld16423_TYPE]=[@P1] AND [T1].[_Fld16423_RTRef]=[@P2] AND [T1].[_Fld16423_RRRef]=[@P3]) ORDERED FORWARD) |
|||
27
H A D G E H O G s
26.03.13
✎
09:32
|
Без Выразить даже за данными ходить не надо, все в индексе, поэтому да - без Выразить шустрее, просто под SQL это не чувствуется :-)
|
|||
28
AndOne
26.03.13
✎
09:39
|
ВЫБРАТЬ РАЗРЕШЕННЫЕ
СвойстваОбъектов.Ссылка КАК Свойство ПОМЕСТИТЬ СвойстваОбъектов ИЗ ПланВидовХарактеристик.СвойстваОбъектов КАК СвойстваОбъектов ГДЕ СвойстваОбъектов.НазначениеСвойства = ЗНАЧЕНИЕ(ПланВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Номенклатура) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗРЕШЕННЫЕ СвойстваОбъектов.Свойство КАК Свойство, СвойстваОбъектов.Свойство.Представление КАК СвойствоНаименование, "ПВХ_" + СвойстваОбъектов.Свойство.Наименование КАК СвойствоПредставление, ЕСТЬNULL(ЗначенияСвойствОбъектов.Значение, ЗНАЧЕНИЕ(Справочник.ЗначенияСвойствОбъектов.ПустаяСсылка)) КАК ЗначениеСвойства, ВЫБОР КОГДА ЗначенияСвойствОбъектов.Значение ЕСТЬ NULL ТОГДА ЛОЖЬ ИНАЧЕ ИСТИНА КОНЕЦ КАК ЗначениеНайдено ИЗ СвойстваОбъектов КАК СвойстваОбъектов ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов ПО (&Номенклатура = (ВЫРАЗИТЬ(ЗначенияСвойствОбъектов.Объект КАК Справочник.ДоговорыКонтрагентов))) И СвойстваОбъектов.Свойство = ЗначенияСвойствОбъектов.Свойство |
|||
29
AndOne
26.03.13
✎
09:42
|
(27) Индексировать временные таблицы в первых 2 запросах нет необходимости, индекс все равно не будет использоваться СУБД. Оптимизатор СУБД вероятно всего будет использовать SKAN, чем INDEX SEEK.
|
|||
30
Domanoff26
26.03.13
✎
09:45
|
(29) почему не будет? а в каких случаях все таки будет?
|
|||
31
Domanoff26
26.03.13
✎
09:46
|
(25) т е получается когд а индекс есть "выразить" не нужно, более того работает дольше?
|
|||
32
AndOne
26.03.13
✎
09:53
|
||||
33
dauster
26.03.13
✎
10:03
|
(0) а обязательно запрос делать по 1 номенклатурной позиции? Может сразу все скопом обработать или логика решения требует обработку попозиционно?
|
|||
34
Fragster
гуру
26.03.13
✎
10:56
|
(25) А мне вот западло в профайлер лезть, я просто для себя решил, что любая функция на индексированное поле не дает этот самый индекс использовать
|
|||
35
Fragster
гуру
26.03.13
✎
10:56
|
(34) и выразить не проверял, по этому
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |