Вход | Регистрация

  1  2   

Простейший запрос и его трасса

Простейший запрос и его трасса
Я
   Sasha_H
 
22.11.18 - 15:04
Добрый день!

1С:Предприятие 8.3 (8.3.13.1513)

Не понимаю почему платформа циклически делает кучу маленьких запросов.

ВЫБРАТЬ

    Номенклатура.ссылка КАК Ссылка
ИЗ
    Справочник.Номенклатура КАК Номенклатура


https://pastenow.ru/42d23fef832175164d851e7c6e24dc3d

Записей в справочнике мало для теста прогоняю 137 записей. В трасе 137 запросов. Я ВШОКЕ как это понимать? Почему запрос не один!?
 
 
   Sasha_H
 
1 - 22.11.18 - 15:04
   Sasha_H
 
2 - 22.11.18 - 15:05
exec sp_executesql N'SELECT
T1._IDRRef,
T1._Description
FROM dbo._Reference269 T1
WHERE ((T1._Fld1952 = P1)) AND (T1._IDRRef = @P2)',N'P1 numeric(10),@P2 varbinary(16)',0,0x80CF005056B9DBD311E75CCFD52EC77E
   Sasha_H
 
3 - 22.11.18 - 15:05
exec sp_executesql N'SELECT
T1._IDRRef,
T1._Description
FROM dbo._Reference269 T1
WHERE ((T1._Fld1952 = P1)) AND (T1._IDRRef = @P2)',N'P1 numeric(10),@P2 varbinary(16)',0,0x80CF005056B9DBD311E75CCFD52EC783
   Sasha_H
 
4 - 22.11.18 - 15:05
и так далее...
   ptiz
 
5 - 22.11.18 - 15:06
(0) Потому что ты это делаешь в консоли запросов и запросы генерятся, чтобы показать представление на экране.
   Dmitry1c
 
6 - 22.11.18 - 15:06
а чо прикольно
   youalex
 
7 - 22.11.18 - 15:06
_Description
   Dmitry1c
 
8 - 22.11.18 - 15:06
(5) ловите эксперта!
   Sasha_H
 
9 - 22.11.18 - 15:08
(5) Согласен
   Sasha_H
 
10 - 22.11.18 - 15:09
(8) да ты что!
 
 Рекламное место пустует
   Sasha_H
 
11 - 22.11.18 - 15:11
(5) Точняк я жестко затупил. Спасибо!
   МихаилМ
 
12 - 22.11.18 - 15:16
(11) в 1с77 точно также.
   Sasha_H
 
13 - 22.11.18 - 15:21
Вопрос снят. Я реально жестко тупанул забыв, то чтобы предоставить ссылку на форме платформа делает еще запрос.
   arsik
 
14 - 22.11.18 - 15:36
Вопрос почти по теме.
А есть инструмент, что бы выполнить запрос и посмотреть сразу его трассировку?
   arsik
 
15 - 22.11.18 - 15:37
+(14) Типа консоль запросов с трассировкой MSSQL\PostgreSQL
   IvanGorbunov
 
16 - 22.11.18 - 15:38
(14) а есть кстати для файловой базы?
   Mankubus
 
17 - 22.11.18 - 15:38
(14) поищи инструменты разработчика
   los_hooliganos
 
18 - 22.11.18 - 15:39
(14) Трассировки нету.
А вот вид в скуль формате есть.
Трассировка это запись данных отладки запроса.
   arsik
 
19 - 22.11.18 - 15:44
(16) Для файловой такого не будет. Формат данных то закрыт.
(17) Ок. Надо будет им задонатить. Инструмент хорош.
(18) Ну и? Какая ни будь тулза включает перед запросом
, забирает данные и выключает. И что бы все автоматом. Сейчас сложно, тем более если с базой еще кто то работает.
   youalex
 
20 - 22.11.18 - 17:35
(14) КИП
   arsik
 
21 - 22.11.18 - 17:39
(20) Он вроде только для Корп. Ну и эту всю бодягу еще разворачивать, когда нужно пару запросов глянуть.
   Sasha_H
 
22 - 22.11.18 - 17:47
И все -же я туплю. Пытаюсь разобраться с трасами при соединении.

ВЫБРАТЬ

    СвободныеОстаткиОстатки.Номенклатура КАК Номенклатура,
    СвободныеОстаткиОстатки.Склад КАК Склад,
    СвободныеОстаткиОстатки.ВНаличииОстаток КАК ВНаличииОстаток
ПОМЕСТИТЬ ВтОстатки
ИЗ
    РегистрНакопления.СвободныеОстатки.Остатки КАК СвободныеОстаткиОстатки

ИНДЕКСИРОВАТЬ ПО
    Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВтОстатки.ВНаличииОстаток КАК ВНаличииОстаток,
    СпрНоменклатура.Наименование КАК Наименование
ИЗ
    ВтОстатки КАК ВтОстатки
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
        ПО ВтОстатки.Номенклатура = СпрНоменклатура.Ссылка

https://pastenow.ru/46EPP

Почему при соединении справочника с ВТ возвращается количество всех его записей.?...
   Sasha_H
 
23 - 22.11.18 - 17:48
   palsergeich
 
24 - 22.11.18 - 17:49
(14) <plansql/ >
   Sasha_H
 
25 - 22.11.18 - 17:49
В трасе видно, что возвращено 215 записей это количество всех элементов справочника. И также поиск на внутреннем соединении ВНЕ кластерном индексе, что еще более странно поскольку соединение ССЫЛКА = ССЫЛКА
   palsergeich
 
26 - 22.11.18 - 17:50
(21) КИП <> КОРП
   palsergeich
 
27 - 22.11.18 - 17:51
(25) У вас поле ВтОстатки.ВНаличииОстаток не входит в индекс - скорее всего это и есть причина - не полное попадание в индекс
   palsergeich
 
28 - 22.11.18 - 17:52
ИНДЕКСИРОВАТЬ ПО

    Номенклатура
- в Ващей ситуации совершенно бесполезно
   Sasha_H
 
29 - 22.11.18 - 17:56
(28) а я эксперементирую по разному )
   Sasha_H
 
30 - 22.11.18 - 17:57
(27) Да но это временная таблица.

Тоесть, что у нас получается. Чтобы получить оптимально Наименование товара я присоединяю временную таблицу к физической (справочник.Номенклатура), а если бы в нем было 1000000 записей - это катастрофа
   palsergeich
 
31 - 22.11.18 - 17:58
вы же понимаете что каждый пакет в запросе - отдельный запрос.
Если вы из пакетного запроса меняете пакет и не меняете пакет 2, то оптимизатор при исполнениии запроса 2 смотрит - есть ли такой уже скомпилированный план или нет, если есть то исполняет по нему.
И ему все равно что сейчас это уже не актуально
   palsergeich
 
32 - 22.11.18 - 17:59
(30) Если у Вас будет 1000000 записей во временной таблице: то проблемы будет 2 - создвние этой таблицы и построение индекса - это не бесплатно и весьма затратно.
   palsergeich
 
33 - 22.11.18 - 18:00
В тех текстах которые проводил я - на больших временных таблицах от Индексировать как правило больше вреда чем пользы
 
 
   Sasha_H
 
34 - 22.11.18 - 18:14
(31) Так вопрос сейчас не об том, а о том почему он при соединении с ВТ в самой ВТ строк меньше опросил ВЕСЬ справочник номенклатуры.

Представим ситуацию на остатках 100 элементов соединение с Номенклатурой (где количество на справочнике сотни тысяч) он прочитает весь его!
   palsergeich
 
35 - 22.11.18 - 18:19
(34) а какой был физический оператор?
   palsergeich
 
36 - 22.11.18 - 18:19
Если clustered index seek то все хорошо
   palsergeich
 
37 - 22.11.18 - 18:21
Так же обрати внимание на количество чтений.
+ При изменении запроса в пакетном запросе рекомендую в тесте скидывать кеш планов запроса
   Sserj
 
38 - 22.11.18 - 18:22
(34) Потому что у SQL сервера нет статистики по временной таблице и он не знает что в ней будет меньше строк. Ее не надо индексировать тогда будет использован индекс справочника.
   palsergeich
 
39 - 22.11.18 - 18:23
(34) оптимизатор тоже штука умная, план запроса на 200 элементах справочника от плана запросов при 1 000 000 элементов может отличаться.
Тут как оптимизатор решит
   Sasha_H
 
40 - 22.11.18 - 18:25
(39) Это да!
   palsergeich
 
41 - 22.11.18 - 18:26
(38) увы но нет, каждый запрос в пакете - физически отдельный запрос.
И на момент выполнения запроса 2 оптимизатор уже знает сколько строк в таблице 1.
Это в общем то и было киллер фичей пакетных запросов относительно вложенных запросов.
Другое дело что план на 1 запись и на 1 миллион будет одинаков.
На тесте чистите кеш планов запросов что бы видеть актуальные планы.
   Sasha_H
 
42 - 22.11.18 - 18:26
(38) Брехня - удалил индекс фигня таже
   Sasha_H
 
43 - 22.11.18 - 18:27
Насчет индекса в ВТ - если его не будет то таблица будет сканироваться и кстати я не соглашусь с  palsergeich в индексе есть смысл и об этом говорится на курсах Бурмистрова Андрея
   Вафель
 
44 - 22.11.18 - 18:27
а какой джойн там испльзуется?
   Sasha_H
 
45 - 22.11.18 - 18:28
/Да я согласен с  palsergeich , что на больших объема накладные расходы но и выгришь там существен чем Сканирование
   Sasha_H
 
46 - 22.11.18 - 18:28
(44) пробовал и Левое и Внутреннее
   Вафель
 
47 - 22.11.18 - 18:28
(43) индекс по временно? он нужен если она используется более 1 раза
   Вафель
 
48 - 22.11.18 - 18:28
(46) имеется ввиду: merge - hash - lookup
   Sasha_H
 
49 - 22.11.18 - 18:29
(47) Совершенно верно данный пример это лишь часть ОДНОГО большого запроса. Это эксперимент просто и я в разрыве шаблона сейчас
 
 Рекламное место пустует
   Sasha_H
 
50 - 22.11.18 - 18:31
   H A D G E H O G s
 
51 - 22.11.18 - 19:13
(50) Оптимизатор решил, что так эффективнее.

Там внутри, платформа накладывает условие на область данных ( у вас это поле _Fld1551, при этом не учитывая, что почти все записи номенклатуры принадлежат этому полю (возможно нужно обновить статистику).

Если вы уменьшите первую выборку, например 
ВЫБРАТЬ ПЕРВЫЕ 10

    СвободныеОстаткиОстатки.Номенклатура КАК Номенклатура,

И осложните посмтроение хэштаблицы, убрав Сортировку выборки

убрав:
ИНДЕКСИРОВАТЬ ПО

    Номенклатура
 

возможно вы получите поиск по кластерному индексу справочника в цикле.
   palsergeich
 
52 - 22.11.18 - 19:26
(51) +1
(50) На Вашем месте я не искал бы ведьм там где их скорее всего нет, конкретно эти запросы очень простые и вероятность того, что оптимизатор круто ошибся крайне мала.
К сожалению мой пост, который я набирал в метро так и не отправился, а заново набирать лень.
   H A D G E H O G s
 
53 - 22.11.18 - 19:38
(52) Ну вообще, оптимизатор там лажает прям конкретно
   palsergeich
 
54 - 22.11.18 - 19:40
(53) Я просто сам файл не смотрел - на мобиле не удобно.
Заставил старика смотреть))).
   H A D G E H O G s
 
55 - 22.11.18 - 19:41
И проще всего его победить - добавить в выборку 2 запроса легкое поле, не входящее в индексы, например
СпрНоменклатура.ВестиУчетПоГТД КАК ВестиУчетПоГТД
   Sasha_H
 
56 - 22.11.18 - 19:47
Тут интерес просто возник, какого ИКС... Со статистикой все гуд поскольку обновил вручную специально но так и ничего не поменялось.

Конечно данных мало. И возник логичных панический вопрос, черт , а если он ошибается так на больших объемах то это БЕДА.

Ведь у меня какая задача. Я хочу в отчет чтобы сократить вывод циклических запросов Номенклатура.Ссылка соответсвенно получить Наименование. Если сделать как рекомендует 1С ПРЕДСТАВЛЕНИЕ(Ссылка) то тут лажа - там вообще происходит поиск в ключе, что не гуд.

А если сделать ВТ.Номенклатура.наименование то оптимизатор тяжело работает. Вот я и начал искать ведьм!
   Sasha_H
 
57 - 22.11.18 - 19:49
Черт побери как лучше!?
   H A D G E H O G s
 
58 - 22.11.18 - 19:51
(57) Добавь в выборку СпрНоменклатура.ВестиУчетПоГТД
   Sasha_H
 
59 - 22.11.18 - 19:55
Вытащил артикул. Но как бы ничего не поменялось на дропе обновил план
   Sasha_H
 
60 - 22.11.18 - 20:05
И все же ведьмы есть и на лицо. Запустил этот отчет на боевой.

Rows         Executes     StmtText                                                                                                                                                                                                                             StmtId       NodeId       Parent       PhysicalOp   LogicalOp    Argument                                                                                                                                                                                                     DefinedValues                                EstimateRows EstimateIO   EstimateCPU  AvgRowSize   TotalSubtreeCost OutputList                                   Warnings     Type         Parallel     EstimateExecutions
----         --------     --------                                                                                                                                                                                                                             ------       ------       ------       ----------   ---------    --------                                                                                                                                                                                                     -------------                                ------------ ----------   -----------  ----------   ---------------- ----------                                   --------     ----         --------     ------------------
21388        1            Hash Match(Inner Join, HASH:([T1].[_Q_000_F_000RRef])=([T2].[_IDRRef]), RESIDUAL:([erp_UT_Robinzon_HotCopy].[dbo].[_Reference169].[_IDRRef] as [T2].[_IDRRef]=[tempdb].[dbo].[#tt26].[_Q_000_F_000RRef] as [T1].[_Q_000_F_000RRef])) 0            0                         Hash Match   Inner Join   HASH:([T1].[_Q_000_F_000RRef])=([T2].[_IDRRef]), RESIDUAL:([erp_UT_Robinzon_HotCopy].[dbo].[_Reference169].[_IDRRef] as [T2].[_IDRRef]=[tempdb].[dbo].[#tt26].[_Q_000_F_000RRef] as [T1].[_Q_000_F_000RRef])                                              21152,9      0            0,851722     124          1,22791          [T1].[_Q_000_F_001], [T2].[_Description]                  PLAN_ROW     0            1                  
21388        1              |--Table Scan(OBJECT:([tempdb].[dbo].[#tt26] AS [T1]))                                                                                                                                                                             0            1            0            Table Scan   Table Scan   OBJECT:([tempdb].[dbo].[#tt26] AS [T1])                                                                                                                                                                      [T1].[_Q_000_F_000RRef], [T1].[_Q_000_F_001] 21388        0,0771991    0,0236838    36           0,100883         [T1].[_Q_000_F_000RRef], [T1].[_Q_000_F_001]              PLAN_ROW     0            1                  
25746        1              |--Index Seek(OBJECT:([erp_UT_Robinzon_HotCopy].[dbo].[_Reference169].[_Reference169_Descr] AS [T2]), SEEK:([T2].[_Fld970]=[@P1]) ORDERED FORWARD)                                                                                 0            2            0            Index Seek   Index Seek   OBJECT:([erp_UT_Robinzon_HotCopy].[dbo].[_Reference169].[_Reference169_Descr] AS [T2]), SEEK:([T2].[_Fld970]=[@P1]) ORDERED FORWARD                                                                          [T2].[_IDRRef], [T2].[_Description]          25746        0,246829     0,0284776    127          0,275306         [T2].[_IDRRef], [T2].[_Description]                       PLAN_ROW     0            1
   Sasha_H
 
61 - 22.11.18 - 20:07
О фак ))

ввобщем записей на остатках 21388

а это 

25746 Кво на справочнике номенклатуры. Тоесть чтобы получить наименование он один Х...рен смотрит весь справочник - Я В ШОКЕ
   H A D G E H O G s
 
62 - 22.11.18 - 20:13
(59) Ты чето не то сделал.
   H A D G E H O G s
 
63 - 22.11.18 - 20:15
ВЫБРАТЬ
    СвободныеОстаткиОстатки.Номенклатура КАК Номенклатура,
    СвободныеОстаткиОстатки.Склад КАК Склад,
    СвободныеОстаткиОстатки.ВНаличииОстаток КАК ВНаличииОстаток
ПОМЕСТИТЬ ВтОстатки
ИЗ
    РегистрНакопления.СвободныеОстатки.Остатки КАК СвободныеОстаткиОстатки
;



////////////////////////////////////////////////////////////////////////////////


ВЫБРАТЬ
    ВтОстатки.ВНаличииОстаток КАК ВНаличииОстаток,
    СпрНоменклатура.Наименование КАК Наименование,
    СпрНоменклатура.ВестиПоГТД КАК ВестиПоГТД

ИЗ
    ВтОстатки КАК ВтОстатки
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
        ПО ВтОстатки.Номенклатура = СпрНоменклатура.Ссылка

Вот так сделай.
Вытащи поле, которое не индексировано.
   palsergeich
 
64 - 22.11.18 - 20:17
(63) так он получит то, от чего бежал. (56)
   Sasha_H
 
65 - 22.11.18 - 20:20
Да один хер только в профиль обновил план уже на боевых реалиях.
   Sasha_H
 
66 - 22.11.18 - 20:21
Не понимаю почему просматривается ВСЯ ТАБЛИЦА СПРАВОЧНИКА %)
   Evg-lylyk
 
67 - 22.11.18 - 20:22
(15) http://catalog.mista.ru/public/940250/
Постгрес не поддерживает
   Evg-lylyk
 
68 - 22.11.18 - 20:24
(16) для файловой работает
   Sasha_H
 
69 - 22.11.18 - 20:24
Самое смешное, что СЕРВЕРА вообще разные. СКЛ версии абсолютно разные только платформа 1с одна и та же. А цука план запроса 1 в 1
   H A D G E H O G s
 
70 - 22.11.18 - 20:28
(66) Так это нормально.
   H A D G E H O G s
 
71 - 22.11.18 - 20:33
(66) Из ненормального там - фанатичное использование некластерного индекса вместо кластерного, но, возможно, чтение кластерного индекса затратнее.
   H A D G E H O G s
 
72 - 22.11.18 - 20:34
Ну и HashJoin вместо MergeJoin, хоть таблицы и сравнимы по размерам.
   Sasha_H
 
73 - 22.11.18 - 20:38
(70) У меня клиника по ходу. Но разве не должно быть просмотрено ровно то количество записей которое в ВТ. ??
   Sasha_H
 
74 - 22.11.18 - 20:45
ВЫБРАТЬ ПЕРВЫЕ 10
    СпрНоменклатура.Ссылка КАК Ссылка,
    0 КАК Поле1
ПОМЕСТИТЬ Товары
ИЗ
    Справочник.Номенклатура КАК СпрНоменклатура
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    Товары.Поле1 КАК Поле1,
    СпрНоменклатура.Наименование КАК Наименование
ИЗ
    Товары КАК Товары
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
        ПО Товары.Ссылка = СпрНоменклатура.Ссылка

А вот так запрос в эфективном плане как и положено просмотрел 10 записей.
   Sasha_H
 
75 - 22.11.18 - 20:45
Ребят так что не так-то? ... Это я идиот так и скажите !
   palsergeich
 
76 - 22.11.18 - 20:47
(73) Давай начем сначала:
Что ты имеешь ввиду над просмотрено ровно то количество записей которое в ВТ.
   palsergeich
 
77 - 22.11.18 - 20:48
Мне кажется у тебя в голове немножко каша
   palsergeich
 
78 - 22.11.18 - 20:48
Это нормально
   Sasha_H
 
79 - 22.11.18 - 20:55
Посмотри план запроса который только что представил. Тоесть в ВТ 10 записей товаров.

Инерджойном я соединяю ВТ = Справочник.Номенклатура и тут все шикарно он как положено Вернул 10 записей не 122 как до этого всех элементов в справочнике и смотрел кластерный индекс все как положено.

А из примера, что с по остаткам. Я получаю ВТ без склада по товарам тоесть 100 элементов в выборке ВТ. и там план запроса смотрит весь справочник все его элементы и не кластерный индекс.

В чем у меня каша?
   Sasha_H
 
80 - 22.11.18 - 20:58
Черт точно таки каша... все пойду утоплюсь

Сделал выбрать первые 133 и опять он стал просматривать всю таблицу справочника
   palsergeich
 
81 - 22.11.18 - 20:58
(79) Ну терминология так себе - я ее за день наслушался.
Понимает, умеет и тд.
   palsergeich
 
82 - 22.11.18 - 20:59
(80) Конечно, Первые - всегда скан
   Sasha_H
 
83 - 22.11.18 - 21:00
(81) здесь не совсем понял.
   Sasha_H
 
84 - 22.11.18 - 21:01
(82) А ты план запроса смотрел тектовый? А то как еще расказать я не понимаю
   palsergeich
 
85 - 22.11.18 - 21:02
(83) Ключевое слово ПЕРВЫЕ - приводит к сканированию
   palsergeich
 
86 - 22.11.18 - 21:05
(84) Мне лень тебе искать мануалы
1.2.    Операция Scan всегда означает полный (а не частичный) просмотр всей таблицы или индекса, единственное исключение это когда в запросе есть ключевые слова ВЫБРАТЬ ПЕРВЫЕ тогда скан будет не всей таблицы/индекса, а только первых записей. Частичный скан в плане запроса будет выглядеть как оператор Seek но с условием Where, в графическом плане появится раздел Predicate.
   Sasha_H
 
87 - 22.11.18 - 21:05
(85) ни к чему не приводит. Опять выполнил этот запрос и опять Rows 215 Хотя есть на дропе план с инеальным попаданием. НИКТО не работает данные не обнновляются.
   palsergeich
 
88 - 22.11.18 - 21:06
(87) Слишком сложно.
Я отработал 8 часов.
Я не могу стелепатировать про какой запрос ты говоришь и какой там план.
   Sasha_H
 
89 - 22.11.18 - 21:07
Rows         Executes     StmtText

10           1            Nested Loops(Inner Join, OUTER REFERENCES:([T1].[_Q_001_F_000RRef]))

10           1              |--Table Scan(OBJECT:([tempdb].[dbo].[#tt18] AS [T1]))

10           10             |--Clustered Index Seek(OBJECT:([UT].[dbo].[_Reference215].[_Reference215HPK] AS [T2]), SEEK:([T2].[_Fld1551]=[@P1] AND [T2].[_IDRRef]=[tempdb].[dbo].[#tt18].[_Q_001_F_000RRef] as [T1].[_Q_001_F_000RRef]) ORDERED FORWARD) 0            2            0            Clustered Index Seek Clustered Index Seek OBJECT:([UT].[dbo].[_Reference215].[_Reference215HPK] AS [T2]), SEEK:([T2].[_Fld1551]=[@P1] AND [T2].[_IDRRef]=[tempdb].[dbo].[#tt18].[_Q_001_F_000RRef] as [T1].[_Q_001_F_000RRef]) ORDERED FORWARD [T2].[_Description]
   Sasha_H
 
90 - 22.11.18 - 21:08
Вот идеальный план в кластерном индексе по запросу Где Выбрать первые 10. Но я сейчас его выполняю опять И Rows 215, а это к-во элементов в справочнике ВСЕГО
   palsergeich
 
91 - 22.11.18 - 21:10
(90) Где б..ть rows 215?
там 3 оператора.
Еще раз повторю - хочешь услышать ответ, будь добр текст план и что не нравится укажи.
Не ну серьезно, ты сидишь с кучей открытых окон, а я должен угадать?(
   Sasha_H
 
92 - 22.11.18 - 21:10
Щас все будет,
   palsergeich
 
93 - 22.11.18 - 21:14
Сорри если что, день тяжелый был.
Помочь то хочется
   Sasha_H
 
94 - 22.11.18 - 21:19
Вот к этим запросам вопроса нет. НО хочу подчеркнуть, что этот план менялся. Сейчас тут ВЫБРАТь ПЕРВЫЕ 200 для ВТ и ВТ соединяется с номенклатурой и как видно из плана Rows на уровне Номенклатуры поиска 200. Но этот же запрос даже когда было выбрать первые 10 Выдавало Rows на уровне Номенклатуры 215 тоесть смотрелся ВЕСЬ справочник.

https://ibb.co/bwHGnA
https://ibb.co/i64J0V

Теперь к Запросу когда в ВТ помещается товары по остаткам. 122 элемента помещаются в ВТ но тут видно, что просматривается все 215 строк на уровне номенклатуры.

https://ibb.co/cBet0V
https://ibb.co/b0RvEq
   palsergeich
 
95 - 22.11.18 - 21:25
(94) Вот теперь другое дело!
А вот смеха ради -
https://ibb.co/cBet0V
https://ibb.co/b0RvEq
В первом пакете отсортируй по номенклатуре
   palsergeich
 
96 - 22.11.18 - 21:27
(94) Он почему что считает что некластерный индекс Ссылка Наименование - будет быстрее чем кластерный
   H A D G E H O G s
 
97 - 22.11.18 - 21:28
(94) "что просматривается все 215 строк на уровне номенклатуры. "
Естественно.
   palsergeich
 
98 - 22.11.18 - 21:29
(96) И быстрее чем 122 дергать кластерный индекс через NestedLoops
(97) Поправь, если я не прав
   H A D G E H O G s
 
99 - 22.11.18 - 21:30
(94)
Давай я расшифрую.
1) Для временной таблицы построим хештаблицу.
2) Для справочника Номенклатуры найдем по индексу строки, в которых ОбластьДанных=0 и для каждой строки результата найдем строку в хэштаблице.
   H A D G E H O G s
 
100 - 22.11.18 - 21:30
(98) Да, это быстрее, чем дергать 122 раза кластерный.
  1  2   

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует