|
Странное время выполнения запроса | ☑ | ||
---|---|---|---|---|
0
triviumfan
10.05.18
✎
11:53
|
Доброго дня, коллеги!
есть запрос
Не понимаю, почему он выполняется дольше чем этот:
Ведь 1й использует итоги (да, они рассчитаны за этот период), что, собственно, должно влиять на производительность сего запроса, но этого не происходит. ЗЫ: задача - получить неликвидные товары (по ним нет движений за указанный период) |
|||
9
triviumfan
10.05.18
✎
12:04
|
(8) вот так "загажена" таблица номенклатуры)
|
|||
10
triviumfan
10.05.18
✎
12:05
|
||||
11
Timon1405
10.05.18
✎
12:07
|
(7) Раз уж используете ИР, тыкните там(на копии!) в результатах запроса внизу на последнюю вкладку "Запрос результата", там будет кнопка "Трасса"(план запроса для лентяев). он предложит настроить техножурнал и потом выдаст вам план запроса.
|
|||
12
youalex
10.05.18
✎
12:08
|
В первом запросе РАЗЛИЧНЫЕ - не нужно
возможно, есть смысл фильтровать по свойству - в параметрах вирт. таблицы |
|||
13
Галахад
гуру
10.05.18
✎
12:08
|
(7) А если "год" выкинуть из параметров?
|
|||
14
1Сергей
10.05.18
✎
12:09
|
(0) вообще не вижу смысла в соединении
|
|||
15
Timon1405
10.05.18
✎
12:12
|
условие на НЕ - плохое, можно попробовать полное соединение с регистром + ГДЕ регистр.номенклатура есть нулл. но без плана запроса разговор ниочем конечно
|
|||
16
triviumfan
10.05.18
✎
12:13
|
(11) попробую позже, что-то она висит)
(12) да, различные лишнее, по привычке добавил) в параметрах это будет точно лишнее (13) ну, логично же, что будет хуже) (14) а зря, ведь мне не нужны записи с уже установленным ПВХ "неликвид" |
|||
17
triviumfan
10.05.18
✎
12:14
|
(15) да, тоже вариант, сейчас попробую. план будет чуть позже
|
|||
18
1Сергей
10.05.18
✎
12:14
|
(16) Для чего в запросе обращение к таблице Справочник.Номенклатура?
|
|||
19
triviumfan
10.05.18
✎
12:17
|
(18) чтобы получить номенклатуру БЕЗ ДВИЖЕНИЙ. Есть другой способ или я чего-то не знаю?!
|
|||
20
lodger
10.05.18
✎
12:19
|
(0) помимо всего вышеописанного, периодичность виртальной таблицы менять не пробовали? имхо, АВТО больше подходит.
|
|||
21
triviumfan
10.05.18
✎
12:19
|
(11) не умею настраивать ТЖ =)
|
|||
22
1Сергей
10.05.18
✎
12:19
|
(19) как-то так
ВЫБРАТЬ ЗначенияСвойствОбъектов.Объект ИЗ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов ГДЕ ЗначенияСвойствОбъектов.Объект ССЫЛКА Справочник.Номенклатура НЕ ЗначенияСвойствОбъектов.Объект В (ВЫБРАТЬ РАЗЛИЧНЫЕ ПартииТоваровКомпанииОбороты.Номенклатура ИЗ РегистрНакопления.ПартииТоваровКомпании.Обороты(&НачалоПериода, &КонецПериода, Год, ) КАК ПартииТоваровКомпанииОбороты) И (ЗначенияСвойствОбъектов.Значение ЕСТЬ NULL ИЛИ ЗначенияСвойствОбъектов.Значение = &Неликвид) |
|||
23
1Сергей
10.05.18
✎
12:20
|
(22) + а, ну ещё условие на свойство впендюрить
|
|||
24
triviumfan
10.05.18
✎
12:21
|
(20) пробовал - разницы не вижу, хотя теоретически вряд ли оно больше подходит. кстати, ms sql 2014
|
|||
25
triviumfan
10.05.18
✎
12:22
|
(23) не у всей номенклатуры установлено свойство "неликвид", поэтому нужна основная таблица
|
|||
26
Галахад
гуру
10.05.18
✎
12:23
|
(16) А ты попробуй.
|
|||
27
lodger
10.05.18
✎
12:23
|
(22) уверены, что в ЗначенияСвойствОбъектов есть все ссылки на номенклатуру?
|
|||
28
1Сергей
10.05.18
✎
12:24
|
Ну, ок. Таблица справочника нужна.
Тогда бы сделал через временные таблицы |
|||
29
triviumfan
10.05.18
✎
12:25
|
(26) (24)
|
|||
30
triviumfan
10.05.18
✎
12:26
|
(27) их относительно мало. Свойства установлены примерно для 5% номенклатуры.
|
|||
31
hhhh
10.05.18
✎
12:30
|
(29) попробуй наоборот пустить запросы. Есть вероятность, что sql во втором запросе использует кэш от первого запроса, поэтому 2й быстрее.
|
|||
32
triviumfan
10.05.18
✎
12:33
|
(15) разнозначно.. время одинаковое
В общем.. полез в Profiler |
|||
33
triviumfan
10.05.18
✎
12:35
|
(31) пробовал - нет.
|
|||
34
Мандалай
10.05.18
✎
12:35
|
Попробуй вот эту строку убрать из соединений и впихнуть ее в другое место:
И (ЗначенияСвойствОбъектов.Свойство = &Свойство). |
|||
35
hhhh
10.05.18
✎
12:37
|
(33) только после перезагрузки компа. для чистоты эксперимента
|
|||
36
lodger
10.05.18
✎
12:39
|
ну и для справки, сколько такой запрос займет по времени?
ВЫБРАТЬ ЗначенияСвойствОбъектов.Объект КАК НомЛиквид ПОМЕСТИТЬ Фильтр1 ИЗ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов ГДЕ ЗначенияСвойствОбъектов.Объект ССЫЛКА Справочник.Номенклатура И ЗначенияСвойствОбъектов.Свойство = &Свойство И ЗначенияСвойствОбъектов.Значение <> &Неликвид ; //// ВЫБРАТЬ РАЗЛИЧНЫЕ ПартииТоваровКомпанииОбороты.Номенклатура КАК Номенклатура ПОМЕСТИТЬ Фильтр2 ИЗ РегистрНакопления.ПартииТоваровКомпании.Обороты(&НачалоПериода, &КонецПериода, Авто, НЕ Номенклатура В (Выбрать Фильтр1.НомЛиквид ИЗ Фильтр1 как Фильтр1)) ОБЪЕДИНИТЬ Выбрать Фильтр1.НомЛиквид ИЗ Фильтр1 как Фильтр1 ; //// ВЫБРАТЬ Номенклатура.Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ НЕ Номенклатура.Ссылка В (Выбрать Фильтр2.Номенклатура из Фильтр2 как Фильтр2) |
|||
37
Мандалай
10.05.18
✎
12:40
|
(36)Тогда соединение с временными таблицами и не Есть NULL
|
|||
38
Мандалай
10.05.18
✎
12:41
|
Пардон Есть NULL
|
|||
39
lodger
10.05.18
✎
12:41
|
(37) а, ну можно и так.
|
|||
40
triviumfan
10.05.18
✎
12:47
|
(36) пришлось "грохнуть", т.к. все повисло) збс запрос)))
|
|||
41
lodger
10.05.18
✎
12:49
|
(40) рад, что вам понравилось :)
|
|||
42
unregistered
10.05.18
✎
12:50
|
Объясните кто-нибудь чем это условие
ГДЕ ПартииТоваровКомпанииОбороты.Номенклатура ЕСТЬ NULL И ВЫБОР КОГДА ЗначенияСвойствОбъектов.Значение ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ ЗначенияСвойствОбъектов.Значение = &Неликвид КОНЕЦ отличается от ГДЕ ПартииТоваровКомпанииОбороты.Номенклатура ЕСТЬ NULL И (ЗначенияСвойствОбъектов.Значение ЕСТЬ NULL ИЛИ ЗначенияСвойствОбъектов.Значение = &Неликвид) |
|||
43
Мандалай
10.05.18
✎
12:52
|
РегистрНакопления.ПартииТоваровКомпании.Обороты(&НачалоПериода, &КонецПериода, Авто, НЕ Номенклатура В (Выбрать Фильтр1.НомЛиквид ИЗ Фильтр1 как Фильтр1))
фуфуфу - дрянька редкостная, не рекомендуется в параметрах виртуальных таблиц такие вещи писать. |
|||
44
Адинэснег
10.05.18
✎
13:03
|
ВЫБРАТЬ РАЗЛИЧНЫЕ
Об.Номенклатура ПОМЕСТИТЬ ТоварыСОборотами ИЗ РегистрНакопления.ТоварыНаСкладах.Обороты КАК Об ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗначенияСвойствОбъектов.Объект ПОМЕСТИТЬ НеликвидПоСвойству ИЗ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов ГДЕ ЗначенияСвойствОбъектов.Объект ССЫЛКА Справочник.Номенклатура И ЗначенияСвойствОбъектов.Значение = ИСТИНА И ЗначенияСвойствОбъектов.Свойство = &Неликвид ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СпрНоменклатура.Ссылка ИЗ Справочник.Номенклатура КАК СпрНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ ТоварыСОборотами КАК ТоварыСОборотами ПО СпрНоменклатура.Ссылка = ТоварыСОборотами.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ НеликвидПоСвойству КАК НеликвидПоСвойству ПО СпрНоменклатура.Ссылка = НеликвидПоСвойству.Объект ГДЕ ТоварыСОборотами.Номенклатура ЕСТЬ NULL И НЕ СпрНоменклатура.ЭтоГруппа И НеликвидПоСвойству.Объект ЕСТЬ NULL ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ НеликвидПоСвойству.Объект ИЗ НеликвидПоСвойству КАК НеликвидПоСвойству |
|||
45
bolobol
10.05.18
✎
13:05
|
(43) Какие "такие"? Это же обычные параметры - начало, конец, условие
|
|||
46
Адинэснег
10.05.18
✎
13:08
|
+(44)сорян, под твой регистр:
ВЫБРАТЬ РАЗЛИЧНЫЕ Об.Номенклатура ПОМЕСТИТЬ ТоварыСОборотами ИЗ РегистрНакопления.ПартииТоваровКомпании.Обороты(&НачалоПериода, &КонецПериода, , ) КАК Об ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗначенияСвойствОбъектов.Объект ПОМЕСТИТЬ НеликвидПоСвойству ИЗ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов ГДЕ ЗначенияСвойствОбъектов.Объект ССЫЛКА Справочник.Номенклатура И ЗначенияСвойствОбъектов.Значение = ИСТИНА И ЗначенияСвойствОбъектов.Свойство = &Неликвид ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗначенияСвойствОбъектов.Объект, ЗначенияСвойствОбъектов.Значение ПОМЕСТИТЬ ЗначенияСвойства ИЗ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов ГДЕ ЗначенияСвойствОбъектов.Свойство = &Свойство ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Товары.Ссылка, ЗначенияСвойства.Значение ИЗ (ВЫБРАТЬ СпрНоменклатура.Ссылка КАК Ссылка ИЗ Справочник.Номенклатура КАК СпрНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ ТоварыСОборотами КАК ТоварыСОборотами ПО СпрНоменклатура.Ссылка = ТоварыСОборотами.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ НеликвидПоСвойству КАК НеликвидПоСвойству ПО СпрНоменклатура.Ссылка = НеликвидПоСвойству.Объект ГДЕ ТоварыСОборотами.Номенклатура ЕСТЬ NULL И НЕ СпрНоменклатура.ЭтоГруппа И НеликвидПоСвойству.Объект ЕСТЬ NULL ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ НеликвидПоСвойству.Объект ИЗ НеликвидПоСвойству КАК НеликвидПоСвойству) КАК Товары ЛЕВОЕ СОЕДИНЕНИЕ ЗначенияСвойства КАК ЗначенияСвойства ПО Товары.Ссылка = ЗначенияСвойства.Объект |
|||
47
xXeNoNx
10.05.18
✎
13:10
|
(20) За таб. оборотов и "АВТО" - куля в лоб, выбирай из реальной таблицы!
"НЕ Номенклатура В (" - по пальцам дать. Господа, достаньте консоль с планом запроса и посмотрите во что эти запросы преобразуются |
|||
48
1Сергей
10.05.18
✎
13:14
|
(32) Убери ты этот ВЫБОР из ГДЕ. Сделай как в (22)
|
|||
49
xXeNoNx
10.05.18
✎
13:14
|
а ещеб я затестил:
ВЫБРАТЬ РАЗЛИЧНЫЕ Об.Номенклатура ИЗ РегистрНакопления.ПартииТоваровКомпании.Обороты(&НачалоПериода, &КонецПериода, , ) КАК Об И ВЫБРАТЬ РАЗЛИЧНЫЕ Об.Номенклатура ИЗ РегистрНакопления.ПартииТоваровКомпании КАК Об ГДЕ об.Период МЕЖДУ &НачалоПериода И &КонецПериода |
|||
50
xXeNoNx
10.05.18
✎
13:16
|
+(49) Кстати в первом варианте "РАЗЛИЧНЫЕ" - не нужны, оно будет замедлять
|
|||
51
1Сергей
10.05.18
✎
13:27
|
(50) в данном случае да
|
|||
52
bolobol
10.05.18
✎
13:43
|
Т.е. нет смысла в получении оборотов, рассчитанных в виртуальной таблице, если не просить детализацю расчёта по периоду внутри интересующего периода оборота? Чё за дичь?
|
|||
53
bolobol
10.05.18
✎
13:46
|
Правильнее заставить систему посчитать сумму по группировке из измерений?
|
|||
54
xXeNoNx
10.05.18
✎
13:53
|
(52) Зависит от периодичности.
|
|||
55
bolobol
10.05.18
✎
13:59
|
(54) Да что зависит-то? Если цель виртуальной таблицы - представить предподготовленные отчётные данные.
Периодичность - месяц, запрос за год, в месяц движений 273000. Предлагаете 12 * 273000 строк заново посчитать? И это будет быстрее, чем система сложит 12х цифр? |
|||
56
xXeNoNx
10.05.18
✎
14:01
|
(52) Детализация АВТО, как думаешь во что разворачивает твой запрос по регистру оборотов платформа?
Открой чистую СКД, сделай выборку по регистру оборотов, поставь периодичность АВТО, посмотри поля которые можно выбрать и поставь периодичность МЕСЯЦ и так же посмотри что там можно выбрать А шлифануть: Возми консоль с планом запроса, сначала посмотри "гибридный запрос", который платформа генерит с периодичностью АВТО, а затем с периодичностью МЕСЯЦ. |
|||
57
xXeNoNx
10.05.18
✎
14:02
|
+(56) а если ее приаттачить левым соединением к чему-нить.., тут туши свет
|
|||
58
xXeNoNx
10.05.18
✎
14:02
|
(55) Оно все равно складывает, неявно для Вас
|
|||
59
xXeNoNx
10.05.18
✎
14:04
|
(55) Периодичность должна быть больше месяца, тогда это имеет смысл...
|
|||
60
triviumfan
10.05.18
✎
14:04
|
(15) запрос с оборотами
https://yadi.sk/i/PUi-dNe73VfRVt Запрос с физ таблицей https://yadi.sk/i/PUi-dNe73VfRVt Параллелизм... |
|||
61
xXeNoNx
10.05.18
✎
14:05
|
"Если цель виртуальной таблицы - представить предподготовленные отчётные данные." - цель виртуальной таблицы - облегчить жизнь 1с-программистам
|
|||
62
triviumfan
10.05.18
✎
14:05
|
||||
63
triviumfan
10.05.18
✎
14:07
|
параллельное выполнение даёт около 20% выигрыша)
|
|||
64
bolobol
10.05.18
✎
14:10
|
Запрос с физ таблицей выполнился в 10 раз дольше - это выигрыш в 20% ?
Срочно - в спортлото! Не, обыгрывать вулкан через телеграмм! |
|||
65
Мандалай
10.05.18
✎
14:10
|
Чувак, ты сейчас только что оказался умнее половины тех, кто тебе давал советы :)
|
|||
66
xXeNoNx
10.05.18
✎
14:11
|
(63) неужели
|
|||
67
xXeNoNx
10.05.18
✎
14:12
|
Никто не говорит что нельзя использовать вирт Таблицу оборотов, можно, но нужно знать когда это может привести к проблемам
|
|||
68
unregistered
10.05.18
✎
14:13
|
Тут еще вопрос методический, зависящий от того как построена работа этого регистра. Может быть такое, что возвраты отражаются путём формирования записей с минусом (продажа - расход с "плюсом", а возврат - расход с "минусом"). Тогда в итоговых таблицах оборотов такой номенклатуры может не быть (если продали 10, а потом вернули -10, то 10-10=0).
В таких случаях корректнее обращаться к таблице первичных движений. В любом случае, если даже брать таблицу итогов, то указываться периодичность (хоть "год", хоть "авто") не нужно. |
|||
69
triviumfan
10.05.18
✎
14:15
|
Странная эта штука, параллелизм, он то включается, то нет. Вот сейчас и для оборотов сработал. Время выполнения запроса странное, то 4 секунды, то 5, то 9.
|
|||
70
triviumfan
10.05.18
✎
14:15
|
В общем, возьму ка я физическую таблицу... ну их нафиг эти дурные итоги.
|
|||
71
xXeNoNx
10.05.18
✎
14:18
|
(70) только попадай в индексы)
|
|||
72
bolobol
10.05.18
✎
14:19
|
Что п второму пункту: "НЕ Номенклатура В (" ?
Понятно одно - левое соединение с отбором по NULL. Чем оно не устраивает виртуальную таблицу, которая сама напрашивается на фильтр? Допустим, НЕ В (30000 значений из 100 тыщ всего) |
|||
73
triviumfan
10.05.18
✎
14:22
|
(71) Тут везде index seek.
(72) не понял вопроса |
|||
74
triviumfan
10.05.18
✎
14:23
|
(60) ппц, я скрины не те выложил, ахахаха
|
|||
75
bolobol
10.05.18
✎
14:26
|
(74) Да пофиг уже - тебе же уже написали, что ты оказался умнее доброй половины))
|
|||
76
triviumfan
10.05.18
✎
14:34
|
(68) спасибо за совет, уточню у постановщика задачи... может вообще все не так)
|
|||
77
xXeNoNx
10.05.18
✎
15:10
|
(72) Если это мне вопрос, то использование НЕ в условии ГДЕ, может быть проблема связанная с выбором оптимизатором не верного решения. Если ничего путаю
|
|||
78
xXeNoNx
10.05.18
✎
15:12
|
+(77) Нет, не путаю, вот ссылка:
http://www.sql-server-performance.com/2017/t-sql-where/ |
|||
79
xXeNoNx
10.05.18
✎
15:13
|
+(78) А именно:
Non-sargable search arguments in the WHERE clause, such as “IS NULL”, “<>”, “!=”, “!>”, “!<“, “NOT”, “NOT EXISTS”, “NOT IN”, “NOT LIKE”, and “LIKE ‘%500′” generally prevents (but not always) the query optimizer from using a useful index to perform a search. In addition, expressions that include a function on a column, expressions that have the same column on both sides of the operator, or comparisons against a column (not a constant), are not sargable. |
|||
80
triviumfan
10.05.18
✎
15:14
|
(77) нет, он умный, это мы тупые)
|
|||
81
xXeNoNx
10.05.18
✎
15:18
|
(80) умные иногда тоже тупят)
|
|||
82
bolobol
10.05.18
✎
15:39
|
(79) Так тут про "Non-sargable", а у нас в примере "sargable".
|
|||
83
xXeNoNx
10.05.18
✎
15:53
|
Вот тут sargable(72)?
Не вижу. Если еще нужно, для sargable, то вот: If you currently have a query that uses NOT IN, which offers poor performance because the SQL Server optimizer has to use a scan to perform this activity, instead try to use one of the following options, all of which offer better performance: Use EXISTS or NOT EXISTS. Use IN. Perform a LEFT OUTER JOIN and check for a NULL condition |
|||
84
xXeNoNx
10.05.18
✎
15:54
|
(82) Рекомендую ознакомится со ВСЕЙ статьей, думаю что все вопросы отпадут
|
|||
85
bolobol
10.05.18
✎
16:00
|
(84) в (43) порекомендуй, там не в курсе - гадости мерещатся.
|
|||
86
triviumfan
10.05.18
✎
16:04
|
Оказалось, что нужна номенклатура с остатком, а не из физ. таблицы :)
|
|||
87
bolobol
10.05.18
✎
16:06
|
(86), извини...
(84) А конструкция "Use EXISTS or NOT EXISTS." - как в 1С выглядит? |
|||
88
xXeNoNx
10.05.18
✎
16:16
|
(87) не встречался
|
|||
89
bolobol
10.05.18
✎
16:39
|
И, получается, что не исключать из выборки 30% ненужного выгодно, а соединять с 70% нужного. Да, про то я забыл совсем, про ограничение такое в эскуэль
|
|||
90
bolobol
10.05.18
✎
16:59
|
(86) Так а вопрос какой-то актуальным остался?
Просто, даже из (0) - разница 4 и 5 секунд - ниочём. Вот 35 секунд 5 секунд - это показатель. И такое реально бывает, индексировать временные таблицы приходится, например |
|||
91
xXeNoNx
10.05.18
✎
17:14
|
(89)
"что не исключать из выборки 30% ненужного выгодно, а соединять с 70% нужного" - ну почему же не исключать, исключать ненужное крайне желательно. Все становится очевидно(или нет), когда посмотришь план выполнения запроса. |
|||
92
bolobol
10.05.18
✎
17:19
|
(91) Эх, знал бы я, как смотреть план... Да у меня и базы такой нет, чтобы увидеть разницу. Нет запроса, выполняющегося дольше 5 секунд
|
|||
93
xXeNoNx
10.05.18
✎
17:21
|
(92) Консоль запросов на ИТС, подойдут любые запросы по регистру оборотов
|
|||
94
youalex
10.05.18
✎
19:33
|
(87) эмулируется как ГДЕ 1 В (ВЫБРАТЬ Первые 1 1 ИЗ...)
|
|||
95
triviumfan
10.05.18
✎
20:09
|
(90) Для меня разница в секунду существенна) Поэтому я и запили тему. Кстати, планы запросов оказались почти идентичны, оба распралаллеливаются, но есть тонкие отличия в логике, думаю, даже нет смысла спрашивать их тут =)
Т.к. постановка задачи была изменена, то для решения достаточно виртуальной "ОстаткиИОбороты".
Проверил - результат вроде правильный, и выполняется около секунды. |
|||
96
triviumfan
10.05.18
✎
20:11
|
(95) Наверное, лучше соединением фильтровать/исключать, но точно не в параметрах ВТ :)
|
|||
97
triviumfan
10.05.18
✎
20:18
|
Исправим, а то закидают помидорками:)
|
|||
98
xXeNoNx
11.05.18
✎
10:25
|
(97) Будет тормозить
Какой тип у "ЗначенияСвойствОбъектов.Объект"? А соединение с составным типом к чему может привести? |
|||
99
xXeNoNx
11.05.18
✎
10:29
|
(97) Использование "РегистрНакопления.ПартииТоваровКомпании.ОстаткиИОбороты" оправдано?
|
|||
100
xXeNoNx
11.05.18
✎
10:59
|
+(99) Используй ВЫРАЗИТЬ(ЗначенияСвойств.Объект КАК Справочник.Номенклатура)
|
|||
101
Timon1405
11.05.18
✎
11:16
|
(98) (100) вы не понимаете о чем пишете
соединение с составным типом тормозит когда из него получается реквизит через точку. а ЗначенияСвойствОбъектов.Объект КАК Номенклатура и так ссылочный тип номенклатура, не нужно ничего выражать |
|||
102
xXeNoNx
11.05.18
✎
11:36
|
(101) Откуда Вам знать что я понимаю, а что нет? "Зарапартовался"
|
|||
103
VS-1976
11.05.18
✎
11:42
|
Выполняется дольше, по тому что ты в первом запросе используешь виртуальную таблицу, которая выгребает в том числе и остатки, а во втором случае физическую таблицу. Так как номенклатура содержится в индексе, то чтение всей таблицы не происходит, а только индекса скорее всего. А вообще правильнее на мой взгляд писать запрос таким образом, но и он скорее всего не оптимален но достаточен:
ВЫБРАТЬ спрНоменклатура.Ссылка ИЗ Справочник.Номенклатура КАК спрНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ ( ВЫБРАТЬ РАЗЛИЧНЫЕ Номенклатура ИЗ РегистрНакопления.ПартииТоваровКомпании ГДЕ Период МЕЖДУ &НачалоПериода И &КонецПериода ) КАК тзФильтр ПО спрНоменклатура.Ссылка = тзФильтр.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК тзЗначения ПО спрНоменклатура.Ссылка = тзЗначения.Объект И тзЗначения.Свойство = &Свойство ГДЕ тзФильтр.Номенклатура ЕСТЬ NULL И ( тзЗначения.Значение ЕСТЬ NULL Или тзЗначения.Значение = &Неликвид ) |
|||
104
Повелитель
11.05.18
✎
11:44
|
(0)
(7) 1й выполнятся за 5с, а второй за 4с Тема не о чем. Весь сыр бор из 1 секунды! Допустим твой час стоит 1000 рублей. Ты на форуме провисел 8 часов, затратил на оптимизацию 8000 рублей. Оптимизацию в 1 секунду? Директор бы увидел, уволил. |
|||
105
VS-1976
11.05.18
✎
11:47
|
(104) На разном железе с разным периодом может быть разница не в секунду... А так нужно сразу стараться писать правильно и всё не будет никаких 2-х вариантов.
|
|||
106
xXeNoNx
11.05.18
✎
11:52
|
(103) Соединение с подзапросом?
|
|||
107
Повелитель
11.05.18
✎
11:55
|
(105) Если отчет используют десятки или сотни раз в день, то его стоит оптимизировать.
Если его используют 1 раз в неделю, а такие отчеты как в (0) используют не часто, да пусть он хоть 30 секунд выполняется. |
|||
108
VS-1976
11.05.18
✎
11:58
|
(107) Это да. Но мозг прокачивать всё же нужно, так что пусть тренеруется
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |