powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблемный запрос, нужна помощь с индексами.
25 сообщений из 35, страница 1 из 2
Проблемный запрос, нужна помощь с индексами.
    #39626393
via4esslaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1с-ка формирует вот такой вот листинг в запросе:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
SELECT DISTINCT
_Document53_VT842_Q_000_T_001._Fld844RRef AS f_1,
_Document53_VT842_Q_000_T_001._Fld848RRef AS f_2
FROM
_Document53_VT842 _Document53_VT842_Q_000_T_001 WITH(NOLOCK)
LEFT OUTER JOIN _Document53 _Document53_1 WITH(NOLOCK)
ON _Document53_VT842_Q_000_T_001._Document53_IDRRef = _Document53_1._IDRRef
LEFT OUTER JOIN _Document35 WITH(NOLOCK)
ON _Document53_1._Fld838_TYPE = 0x08 AND _Document53_1._Fld838_RTRef = 0x00000023 AND _Document53_1._Fld838_RRRef = _Document35._IDRRef
LEFT OUTER JOIN _Document34 WITH(NOLOCK)
ON _Document53_1._Fld838_TYPE = 0x08 AND _Document53_1._Fld838_RTRef = 0x00000022 AND _Document53_1._Fld838_RRRef = _Document34._IDRRef
WHERE
(_Document53_1._Fld838_TYPE = @P1 AND _Document53_1._Fld838_RTRef = @P2 AND _Document53_1._Fld838_RRRef = @P3 OR
CASE
WHEN _Document53_1._Fld838_TYPE = 0x08 AND _Document53_1._Fld838_RTRef = 0x00000022
THEN CASE
WHEN _Document34._Fld387_TYPE = 0x01 OR
_Document34._Fld387_TYPE = 0x08 AND _Document34._Fld387_RTRef IS NOT NULL AND _Document34._Fld387_RRRef IS NOT NULL
THEN _Document34._Fld387_TYPE
ELSE NULL
END
WHEN _Document53_1._Fld838_TYPE = 0x08 AND _Document53_1._Fld838_RTRef = 0x00000023
THEN CASE
WHEN _Document35._Fld1203RRef IS NOT NULL
THEN 0x08
ELSE NULL
END
ELSE CASE
WHEN CAST(NULL AS BINARY(1)) = 0x01 OR
0x00 = 0x01
THEN CAST(NULL AS BINARY(1))
ELSE NULL
END
END = @P1 AND CASE
WHEN _Document53_1._Fld838_TYPE = 0x08 AND _Document53_1._Fld838_RTRef = 0x00000022
THEN CASE
WHEN _Document34._Fld387_TYPE = 0x08
THEN _Document34._Fld387_RTRef
WHEN _Document34._Fld387_TYPE IS NULL OR
_Document34._Fld387_TYPE NOT IN (0x01,0x08)
THEN NULL
ELSE 0x00000000
END
WHEN _Document53_1._Fld838_TYPE = 0x08 AND _Document53_1._Fld838_RTRef = 0x00000023
THEN CASE
WHEN _Document35._Fld1203RRef IS NOT NULL
THEN 0x00000023
ELSE NULL
END
ELSE CASE
WHEN CAST(NULL AS BINARY(1)) = 0x08
THEN CAST(NULL AS BINARY(4))
WHEN 0x01 = 0x01 OR
0x01 = 0x01
THEN NULL
ELSE 0x00000000
END
END = @P2 AND CASE
WHEN _Document53_1._Fld838_TYPE = 0x08 AND _Document53_1._Fld838_RTRef = 0x00000022
THEN CASE
WHEN _Document34._Fld387_TYPE = 0x08
THEN _Document34._Fld387_RRRef
WHEN _Document34._Fld387_TYPE IS NULL OR
_Document34._Fld387_TYPE NOT IN (0x01,0x08)
THEN NULL
ELSE 0x00000000000000000000000000000000
END
WHEN _Document53_1._Fld838_TYPE = 0x08 AND _Document53_1._Fld838_RTRef = 0x00000023
THEN _Document35._Fld1203RRef
ELSE CASE
WHEN CAST(NULL AS BINARY(1)) = 0x08
THEN CAST(NULL AS BINARY(16))
WHEN 0x01 = 0x01 OR
0x01 = 0x01
THEN NULL
ELSE 0x00000000000000000000000000000000
END
END = @P3) AND _Document53_VT842_Q_000_T_001._Fld848RRef <> @P4 AND _Document53_VT842_Q_000_T_001._Fld844RRef <> @P4 AND _Document53_1._Marked = @P5



Эта хрень грузит процессор на 100% по всем потокам, производит много чтений и выполняется 4-5 секунд. Нагрузки на диск в эти моменты нет.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
SELECT
_Document53_Q_000_T_001._IDRRef AS f_1
FROM
_Document53 _Document53_Q_000_T_001 WITH(NOLOCK)
LEFT OUTER JOIN _Document35 WITH(NOLOCK)
ON _Document53_Q_000_T_001._Fld838_TYPE = 0x08 AND _Document53_Q_000_T_001._Fld838_RTRef = 0x00000023 AND _Document53_Q_000_T_001._Fld838_RRRef = _Document35._IDRRef
LEFT OUTER JOIN _Document34 WITH(NOLOCK)
ON _Document53_Q_000_T_001._Fld838_TYPE = 0x08 AND _Document53_Q_000_T_001._Fld838_RTRef = 0x00000022 AND _Document53_Q_000_T_001._Fld838_RRRef = _Document34._IDRRef
WHERE
CASE
WHEN _Document53_Q_000_T_001._Fld838_TYPE = 0x08 AND _Document53_Q_000_T_001._Fld838_RTRef = 0x00000022
THEN CASE
WHEN _Document34._Fld387_TYPE = 0x01 OR
_Document34._Fld387_TYPE = 0x08 AND _Document34._Fld387_RTRef IS NOT NULL AND _Document34._Fld387_RRRef IS NOT NULL
THEN _Document34._Fld387_TYPE
ELSE NULL
END
WHEN _Document53_Q_000_T_001._Fld838_TYPE = 0x08 AND _Document53_Q_000_T_001._Fld838_RTRef = 0x00000023
THEN CASE
WHEN _Document35._Fld1203RRef IS NOT NULL
THEN 0x08
ELSE NULL
END
ELSE CASE
WHEN CAST(NULL AS BINARY(1)) = 0x01 OR
0x00 = 0x01
THEN CAST(NULL AS BINARY(1))
ELSE NULL
END
END = @P1 AND CASE
WHEN _Document53_Q_000_T_001._Fld838_TYPE = 0x08 AND _Document53_Q_000_T_001._Fld838_RTRef = 0x00000022
THEN CASE
WHEN _Document34._Fld387_TYPE = 0x08
THEN _Document34._Fld387_RTRef
WHEN _Document34._Fld387_TYPE IS NULL OR
_Document34._Fld387_TYPE NOT IN (0x01,0x08)
THEN NULL
ELSE 0x00000000
END
WHEN _Document53_Q_000_T_001._Fld838_TYPE = 0x08 AND _Document53_Q_000_T_001._Fld838_RTRef = 0x00000023
THEN CASE
WHEN _Document35._Fld1203RRef IS NOT NULL
THEN 0x00000023
ELSE NULL
END
ELSE CASE
WHEN CAST(NULL AS BINARY(1)) = 0x08
THEN CAST(NULL AS BINARY(4))
WHEN 0x01 = 0x01 OR
0x01 = 0x01
THEN NULL
ELSE 0x00000000
END
END = @P2 AND CASE
WHEN _Document53_Q_000_T_001._Fld838_TYPE = 0x08 AND _Document53_Q_000_T_001._Fld838_RTRef = 0x00000022
THEN CASE
WHEN _Document34._Fld387_TYPE = 0x08
THEN _Document34._Fld387_RRRef
WHEN _Document34._Fld387_TYPE IS NULL OR
_Document34._Fld387_TYPE NOT IN (0x01,0x08)
THEN NULL
ELSE 0x00000000000000000000000000000000
END
WHEN _Document53_Q_000_T_001._Fld838_TYPE = 0x08 AND _Document53_Q_000_T_001._Fld838_RTRef = 0x00000023
THEN _Document35._Fld1203RRef
ELSE CASE
WHEN CAST(NULL AS BINARY(1)) = 0x08
THEN CAST(NULL AS BINARY(16))
WHEN 0x01 = 0x01 OR
0x01 = 0x01
THEN NULL
ELSE 0x00000000000000000000000000000000
END
END = @P3 AND NOT _Document53_Q_000_T_001._Marked = @P4



Второй запрос выполняется 1.5 секунды, аналогично грузит процессор и много читает. Дисковая справляется в эти моменты.(очереди 0.01-0.05)

Логично предполагаю, что не хватает индексов под запрос, тюнинг по собранным профайлером данным ускорил запрос но не существенно.

В связи с чем вопросы к знатокам:
Можете порекомендовать индексы для ускорения запроса?
Или стоит брать за уши одинэсника и заставлять переписывать запрос на временные таблицы?

Не так давно встал вопрос с производительностью регистра сведений на другой базе, там всё решилось парой индексов и статистик, здесь к сожалению профайлер+перформансер не помогают.
...
Рейтинг: 0 / 0
Проблемный запрос, нужна помощь с индексами.
    #39626394
via4esslaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
via4esslaw,

Совсем забыл, SQl- MS SQL 2005 x 64, 1с -8.1
...
Рейтинг: 0 / 0
Проблемный запрос, нужна помощь с индексами.
    #39626424
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
via4esslawМожете порекомендовать индексы для ускорения запроса?Такое индексами не лечится.
...
Рейтинг: 0 / 0
Проблемный запрос, нужна помощь с индексами.
    #39626426
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
via4esslawВ связи с чем вопросы к знатокам:
Можете порекомендовать индексы для ускорения запроса?
Или стоит брать за уши одинэсника и заставлять переписывать запрос на временные таблицы?Индексы не помогут, переписывание запросов на временные таблицы тоже, как и изменение раскраски ячеек в отчёте.
Нужно условия поиска поменять с невероятной конструкции CASE на нормальные.
...
Рейтинг: 0 / 0
Проблемный запрос, нужна помощь с индексами.
    #39626437
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, вот, а так хотелось первым сказать: "В морг".
...
Рейтинг: 0 / 0
Проблемный запрос, нужна помощь с индексами.
    #39626589
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvgvia4esslawВ связи с чем вопросы к знатокам:
Можете порекомендовать индексы для ускорения запроса?
Или стоит брать за уши одинэсника и заставлять переписывать запрос на временные таблицы?Индексы не помогут, переписывание запросов на временные таблицы тоже, как и изменение раскраски ячеек в отчёте.
Нужно условия поиска поменять с невероятной конструкции CASE на нормальные.
Это ж 1С.
И запрос сгенерирован самой 1Синой.
Какие могут быть "переписывания на нормальные"?
...
Рейтинг: 0 / 0
Проблемный запрос, нужна помощь с индексами.
    #39626599
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggsteralexeyvgпропущено...
Индексы не помогут, переписывание запросов на временные таблицы тоже, как и изменение раскраски ячеек в отчёте.
Нужно условия поиска поменять с невероятной конструкции CASE на нормальные.
Это ж 1С.
И запрос сгенерирован самой 1Синой.
Какие могут быть "переписывания на нормальные"?Тут я не могу ничего сказать, можно на это как то повлиять или нет. Я сказал про сам запрос. "Нет ничего кроме Сиквела и Датаинжина его" :-)

1С конечно уже давно мем, но мне не верится, что обычные стандартные запросы там рассчитаны на соединение таблиц сканами.
Либо это трансляция какого то пользовательского запроса, написанного на 1С языке, либо это какая то такая кастомная конфигурация.

Вот даже ТС сказал "Или стоит брать за уши одинэсника и заставлять переписывать запрос на временные таблицы?", из чего следует, что это результат работы своих программистов, а не злой 1С, и что они могут влиять на этот запрос.
...
Рейтинг: 0 / 0
Проблемный запрос, нужна помощь с индексами.
    #39626628
via4esslaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,

В 1с этот листинг формируется самописным отчётом. В общем и целом там вот такое :

Запрос.Текст = "ВЫБРАТЬ
| ВложенныйЗапрос.ЕУЗ КАК ЕУЗ,
| ВложенныйЗапрос.Количество КАК Количество,
| ВложенныйЗапрос.Короб КАК Короб,
| ВложенныйЗапрос.ТЕ КАК ТЕ,
| ВложенныйЗапрос.ЕУЗ.Код КАК Код,
| ВложенныйЗапрос.ЕУЗ.Наименование КАК Наименование,
| ВложенныйЗапрос.ЕУЗ.Вес / ВложенныйЗапрос.ЕУЗ.Коэффициент * ВложенныйЗапрос.Количество КАК Вес,
| ВложенныйЗапрос.Количество * ВложенныйЗапрос.ЕУЗ.Объем / 1000000 КАК Объем,
| ВложенныйЗапрос.Ячейка КАК Ячейка,
| ВложенныйЗапрос.Стандарт,
| ВЫБОР
| КОГДА ВложенныйЗапрос.ЕУЗ.Коэффициент2 <= ВложенныйЗапрос.Количество
| И ВложенныйЗапрос.ЕУЗ.Коэффициент2 > 0
| ТОГДА ВЫБОР
| КОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) > ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| ТОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) - 1 + (ВложенныйЗапрос.Количество - ((ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) - 1) * ВложенныйЗапрос.ЕУЗ.Коэффициент2) / ВложенныйЗапрос.ЕУЗ.Коэффициент
| КОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) < ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| ТОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) + (ВложенныйЗапрос.Количество - (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) * ВложенныйЗапрос.ЕУЗ.Коэффициент2) / ВложенныйЗапрос.ЕУЗ.Коэффициент
| ИНАЧЕ ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА ВложенныйЗапрос.ЕУЗ.Коэффициент > 0
| ТОГДА ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент КАК ЧИСЛО(10, 0))
| ИНАЧЕ ВложенныйЗапрос.Количество
| КОНЕЦ
| КОНЕЦ КАК КолКор,
| ВложенныйЗапрос.ЕУЗ.Родитель КАК Группа,
| ВЫБОР
| КОГДА ВложенныйЗапрос.ЕУЗ.Коэффициент2 <= ВложенныйЗапрос.Количество
| И ВложенныйЗапрос.ЕУЗ.Коэффициент2 > 0
| ТОГДА ВЫБОР
| КОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) > ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| ТОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) - 1
| КОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) < ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| ТОГДА ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))
| ИНАЧЕ ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| КОНЕЦ
| ИНАЧЕ 0
| КОНЕЦ КАК кор,
| ВЫБОР
| КОГДА ВложенныйЗапрос.ЕУЗ.Коэффициент2 <= ВложенныйЗапрос.Количество
| И ВложенныйЗапрос.ЕУЗ.Коэффициент2 > 0
| ТОГДА ВЫБОР
| КОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) > ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| ТОГДА (ВложенныйЗапрос.Количество - ((ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) - 1) * ВложенныйЗапрос.ЕУЗ.Коэффициент2) / ВложенныйЗапрос.ЕУЗ.Коэффициент
| КОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) < ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| ТОГДА (ВложенныйЗапрос.Количество - (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) * ВложенныйЗапрос.ЕУЗ.Коэффициент2) / ВложенныйЗапрос.ЕУЗ.Коэффициент
| ИНАЧЕ 0
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА ВложенныйЗапрос.ЕУЗ.Коэффициент > 0
| ТОГДА ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент КАК ЧИСЛО(10, 0))
| ИНАЧЕ ВложенныйЗапрос.Количество
| КОНЕЦ
| КОНЕЦ КАК Бл
|ИЗ
| (ВЫБРАТЬ
| ПроверкаТовары.ЕУЗ КАК ЕУЗ,
| СУММА(ПроверкаТовары.КоличествоПроверено - ПроверкаТовары.Излишек) КАК Количество,
| ПроверкаТовары.Короб КАК Короб,
| ПроверкаТовары.ТЕ КАК ТЕ,
| ПроверкаТовары.ЕУЗ.Код КАК Код,
| ПроверкаТовары.ЕУЗ.Наименование КАК Наименование,
| ПроверкаТовары.Ячейка КАК Ячейка,
| ВЫБОР
| КОГДА ПроверкаТовары.ЕУЗ.Коэффициент2 > 1
| ТОГДА ПроверкаТовары.ЕУЗ.Коэффициент2
| КОГДА ПроверкаТовары.ЕУЗ.Коэффициент > 0
| ТОГДА ПроверкаТовары.ЕУЗ.Коэффициент
| ИНАЧЕ 1
| КОНЕЦ КАК Стандарт
| ИЗ
| Документ.Проверка.Товары КАК ПроверкаТовары
| ГДЕ
| ПроверкаТовары.Ссылка В(&Ссылка)
| И ПроверкаТовары.КоличествоПроверено - ПроверкаТовары.Излишек > 0
|
| СГРУППИРОВАТЬ ПО
| ПроверкаТовары.ТЕ,
| ПроверкаТовары.Короб,
| ПроверкаТовары.ЕУЗ,
| ПроверкаТовары.ЕУЗ.Код,
| ПроверкаТовары.ЕУЗ.Наименование,
| ПроверкаТовары.Ячейка,
| ВЫБОР
| КОГДА ПроверкаТовары.ЕУЗ.Коэффициент2 > 1
| ТОГДА ПроверкаТовары.ЕУЗ.Коэффициент2
| КОГДА ПроверкаТовары.ЕУЗ.Коэффициент > 0
| ТОГДА ПроверкаТовары.ЕУЗ.Коэффициент
| ИНАЧЕ 1
| КОНЕЦ) КАК ВложенныйЗапрос
|
|СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.ЕУЗ,
| ВложенныйЗапрос.Короб,
| ВложенныйЗапрос.ТЕ,
| ВложенныйЗапрос.ЕУЗ.Код,
| ВложенныйЗапрос.ЕУЗ.Наименование,
| ВложенныйЗапрос.Ячейка,
| ВложенныйЗапрос.Стандарт,
| ВложенныйЗапрос.ЕУЗ.Вес / ВложенныйЗапрос.ЕУЗ.Коэффициент * ВложенныйЗапрос.Количество,
| ВложенныйЗапрос.Количество * ВложенныйЗапрос.ЕУЗ.Объем / 1000000,
| ВложенныйЗапрос.ЕУЗ.Родитель,
| ВЫБОР
| КОГДА ВложенныйЗапрос.ЕУЗ.Коэффициент2 <= ВложенныйЗапрос.Количество
| И ВложенныйЗапрос.ЕУЗ.Коэффициент2 > 0
| ТОГДА ВЫБОР
| КОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) > ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| ТОГДА (ВложенныйЗапрос.Количество - ((ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) - 1) * ВложенныйЗапрос.ЕУЗ.Коэффициент2) / ВложенныйЗапрос.ЕУЗ.Коэффициент
| КОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) < ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| ТОГДА (ВложенныйЗапрос.Количество - (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) * ВложенныйЗапрос.ЕУЗ.Коэффициент2) / ВложенныйЗапрос.ЕУЗ.Коэффициент
| ИНАЧЕ 0
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА ВложенныйЗапрос.ЕУЗ.Коэффициент > 0
| ТОГДА ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент КАК ЧИСЛО(10, 0))
| ИНАЧЕ ВложенныйЗапрос.Количество
| КОНЕЦ
| КОНЕЦ,
| ВложенныйЗапрос.Количество,
| ВЫБОР
| КОГДА ВложенныйЗапрос.ЕУЗ.Коэффициент2 <= ВложенныйЗапрос.Количество
| И ВложенныйЗапрос.ЕУЗ.Коэффициент2 > 0
| ТОГДА ВЫБОР
| КОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) > ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| ТОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) - 1 + (ВложенныйЗапрос.Количество - ((ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) - 1) * ВложенныйЗапрос.ЕУЗ.Коэффициент2) / ВложенныйЗапрос.ЕУЗ.Коэффициент
| КОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) < ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| ТОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) + (ВложенныйЗапрос.Количество - (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) * ВложенныйЗапрос.ЕУЗ.Коэффициент2) / ВложенныйЗапрос.ЕУЗ.Коэффициент
| ИНАЧЕ ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА ВложенныйЗапрос.ЕУЗ.Коэффициент > 0
| ТОГДА ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент КАК ЧИСЛО(10, 0))
| ИНАЧЕ ВложенныйЗапрос.Количество
| КОНЕЦ
| КОНЕЦ,
| ВЫБОР
| КОГДА ВложенныйЗапрос.ЕУЗ.Коэффициент2 <= ВложенныйЗапрос.Количество
| И ВложенныйЗапрос.ЕУЗ.Коэффициент2 > 0
| ТОГДА ВЫБОР
| КОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) > ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| ТОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) - 1
| КОГДА (ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))) < ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| ТОГДА ВЫРАЗИТЬ(ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2 КАК ЧИСЛО(10, 0))
| ИНАЧЕ ВложенныйЗапрос.Количество / ВложенныйЗапрос.ЕУЗ.Коэффициент2
| КОНЕЦ
| ИНАЧЕ 0
| КОНЕЦ
|
|УПОРЯДОЧИТЬ ПО
| ТЕ,
| Короб,
| Группа,
| ЕУЗ
|ИТОГИ
| СУММА(Количество),
| СУММА(Вес),
| СУММА(Объем),
| МИНИМУМ(Ячейка),
| СУММА(КолКор)
|ПО
| ТЕ,
| Короб";




Увы, я не 1с-ник и не профи T-SQL, есть ли знакомые люди, которые за деньги/пиво/признательность проконсультируют, что не так и какие конструкции вместо "Выбор" стоит использовать? Или не парить мозг и заказать отчёт у внешней компании? (наш 1с-ник вызывает смутное понимание непонимания принципов производительности запросов)
...
Рейтинг: 0 / 0
Проблемный запрос, нужна помощь с индексами.
    #39626640
aleksrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

1С'ники я думаю и не такую хрень могут написать.
Пару часов назад спорил с человеком из отдела который занимается 1С (ну как занимается, так, иногда обновления накатит и все), и он мне показывал распечатку с сайта разработчика конфигурации где написано:
1) Поставьте прирост 10% в БД.
2) Установите maxdop 1 (типа это лучшая конфигурация для 1с, чтоб дешевые запросы не использовали парллелизм, а про cost treshold parallelism эти придурки не слышали. И типа это чистая OLTP система, там половина сканов, ну да, maxdop 1)
3) Выполняйте периодически freeproccache (потому что мы придурки не умеем параметизировать запросы и кэш забит ad-hoc планами)
4) Делаем пересчет статистики один раз в день (и не важно как часто изменяются данные, и может от этого только хуже будет, частые и ненужные компиляции, хотя какая разниа учитывая пункт 3)
А терменология которую эти раки использовали это капец:
Дословно "Реиндексация и дефрагментация индексов - рекомендуется делать дефрагментацию\реиндексацию хотя бы раз в неделю. Реиндексация блокирует таблицы, поэтому лучше запускать в нерабочее время или периоды минимальной нагрузки. Нет смысла делать дефрагментацию после перестроения индекса (реиндексации). По рекомендациям Microsoft дефрагментацию делают в том случае, если фрагментация индекса не превышает 30%. Если выше рекомендуется делать реиндексацию".
Я минут 5 пытался вьехать в написанное, чем им Ребилд и реорганизация не угодили я не знаю.
...
Рейтинг: 0 / 0
Проблемный запрос, нужна помощь с индексами.
    #39626645
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksrov,

вы хоть сами понимаете о чём возмущаетесь?
...
Рейтинг: 0 / 0
Проблемный запрос, нужна помощь с индексами.
    #39626646
Фотография Дедушка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
via4esslaw,

тут по соседству есть форум 1Сников
вероятность, что там вам поиогут значительно выше
...
Рейтинг: 0 / 0
Проблемный запрос, нужна помощь с индексами.
    #39626653
aleksrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaK,

Да вроде да :)
...
Рейтинг: 0 / 0
Проблемный запрос, нужна помощь с индексами.
    #39626655
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksrovTaPaK,

Да вроде да :)
неа

автортут по соседству есть форум 1Сников
вероятность, что там вам поиогут значительно выше
правильно, убрать и сжечь :)
...
Рейтинг: 0 / 0
Проблемный запрос, нужна помощь с индексами.
    #39626658
aleksrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaK,

И в чем я не прав? Это не сарказм, правда интересно.
У нас база 1С небольшая, зарплата, и я вижу именно то что написал.
...
Рейтинг: 0 / 0
Проблемный запрос, нужна помощь с индексами.
    #39626659
Фотография StarikNavy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
via4esslaw что не так и какие конструкции вместо

я не настоящий 1С, просто они рядом сидят ))
вся эта кривизна sql-запроса и описанна в данном запросе на языке 1С, который почти один к одному переведен на sql

т.е. вообще никаких проблем: взять грамотного 1Ска, и попросить его составить грамотный запрос
сама система 1С, тут вобще не при делах
...
Рейтинг: 0 / 0
Проблемный запрос, нужна помощь с индексами.
    #39626676
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
via4esslaw,
Код: sql
1.
2.
3.
4.
5.
6.
CREATE NONCLUSTERED INDEX [некошерный_индекс_однократный] ON [_Document53_VT842] -- таблица строк документа
(
	[_Fld848RRef] ASC -- ключ номенклатуры, селективность высокая
, [_Fld844RRef] ASC -- ключ торговой точки, селективность чуть пониже
)
INCLUDE ([_Document53_IDRRef]) -- ссылка на документ
...
Рейтинг: 0 / 0
Проблемный запрос, нужна помощь с индексами.
    #39626678
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksrovЯ минут 5 пытался вьехать в написанное, чем им Ребилд и реорганизация не угодили я не знаю
...
И в чем я не прав? Это не сарказм, правда интересно.
У нас база 1С небольшая, зарплата, и я вижу именно то что написал.
а что не то с ребилдом-то?
они пишут (некий корявый перевод с инглиша, как мне кажется):
делайте ребилд или реиндекс хотя бы раз в неделю.
нет смысла делать реорг после ребилда.
реорг рекомендуем делать при фрагментации до 30%,
если больше, то ребилд.

что неправильно-то?
...
Рейтинг: 0 / 0
Проблемный запрос, нужна помощь с индексами.
    #39626681
aleksrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123,

Я про терминологию говорил, не сразу вьехал о чем пишется, я про это.
А TaPaK говорит что в остальном я на них нагавариваю.
...
Рейтинг: 0 / 0
Проблемный запрос, нужна помощь с индексами.
    #39626686
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
via4esslaw,

Ой-вей, немного ошибся. Это же "Розница 8.Аптека", проверка номенклатуры по коробкам? Документ - судя по всему некая инвентаризация.
...
Рейтинг: 0 / 0
Проблемный запрос, нужна помощь с индексами.
    #39626690
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
via4esslawВ 1с этот листинг формируется самописным отчётом
Вы делаете мне смешно :)
via4esslawИли не парить мозг и заказать отчёт у внешней компании? (наш 1с-ник вызывает смутное понимание непонимания принципов производительности запросов)
Таки да.
...
Рейтинг: 0 / 0
Проблемный запрос, нужна помощь с индексами.
    #39626695
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksrovYasha123,

Я про терминологию говорил, не сразу вьехал о чем пишется, я про это.
А TaPaK говорит что в остальном я на них нагавариваю.
так я про что всю жизнь долблю:
надо в подлиннике читать,
а не корявенькие переводы.
----
а про наговоры.
да такие рекомендации лучше никаких.
пусть хоть раз в день статистику обновляют, не треснут поди.
вчера сервер смотрели, OLTP.
запрос по последним трем дням ушел в кому.
в плане вижу, что он 1 строку ожидает и пошел делать лукапы(NL),
выбрал голый индекс по дате, а тучу остальных полей в кластерном по GUID(!) ищет.
ну это бы до завтра работало.
говорю, что со статистикой?
ой, слов таких не знаем.
смотрю дату статистики: 1 апреля.
ну он и считает, что строк после 1ого вообще нет.
а там миллион.
миллион рандомных лукапов,
который по-любому ВСЮ таблицу в память подымет.
да уж лучше бы сразу сканил, прости господи, хотя бы подряд читал бы
...
Рейтинг: 0 / 0
Проблемный запрос, нужна помощь с индексами.
    #39626704
aleksrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123,

Ну если так посмотреть то да, если нет DBA пускай лучше каждый день делают.
А зачем совет с maxdop 1 и с очисткой кэша я так и не понял.
...
Рейтинг: 0 / 0
Проблемный запрос, нужна помощь с индексами.
    #39626713
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksrovYasha123,

Ну если так посмотреть то да, если нет DBA пускай лучше каждый день делают.
А зачем совет с maxdop 1 и с очисткой кэша я так и не понял.
ну наверное они под тот самый сервер писали,
что мне вчера показали.
у него 24 ядра, maxdop 0 (по умолчанию).
вернее, у них вообще все по умолчанию.
а сервер вообще-то OLTP.

1 не 1, но если права дадут, 8 выставлю
---

про очистку кэша лажа какая-то,
может это какой-то DWH-шник писал?
там и правда можно себе позволить все перекомпилировать,
только лучше станет
...
Рейтинг: 0 / 0
Проблемный запрос, нужна помощь с индексами.
    #39626722
aleksrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123,

У меня 8 стоит, вполне норм.
Я кстати довольно часто встречаю советты чиситить кэш, из свежего https://habrahabr.ru/post/349910/
Я даже не знал что есть проблема как "устаревание процедурного кэша"
Хабо кстати давно не читаю, там давно какая та лажа, зашел недавно посмотреть мож изменилось что, наткнулся на это, закрыл.
...
Рейтинг: 0 / 0
Проблемный запрос, нужна помощь с индексами.
    #39626725
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksrov,

чистить кеш приходится при говнокодинге и такой же архитектуре.
...
Рейтинг: 0 / 0
25 сообщений из 35, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблемный запрос, нужна помощь с индексами.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]