powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Оптимизация запроса
25 сообщений из 41, страница 1 из 2
Оптимизация запроса
    #39630339
Чингис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дд как оптимизировать запрос?


к примеру

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SELECT     derivedtbl_1.cAB, derivedtbl_1.kontr_id, derivedtbl_1.Strt_id, derivedtbl_2.cAB AS ns, derivedtbl_1.STRTNAME, derivedtbl_1.Kontroller_Name
FROM         (SELECT     COUNT(V_ved.ab_kart_oid) AS cAB, V_ved.kontr_id, V_ved.Strt_id, V_ved.STRTNAME, V_ved.Kontroller_Name
                       FROM          V_ved INNER JOIN
                                                  (SELECT     V_saldoN.Ab_kart_oid, T_nach_saldo.Date_pokaz
                                                    FROM          T_nach_saldo INNER JOIN
                                                                           V_saldoN ON T_nach_saldo.OID = V_saldoN.mxoid) AS TSMX ON V_ved.ab_kart_oid = TSMX.Ab_kart_oid
                       WHERE      (V_ved.ab_kart_oid BETWEEN 26808 AND 27008)
                       GROUP BY V_ved.kontr_id, V_ved.Strt_id, V_ved.STRTNAME, V_ved.Kontroller_Name) AS derivedtbl_1 LEFT OUTER JOIN
                         
                       
                        (SELECT     COUNT(V_ved_1.ab_kart_oid) AS cAB, V_ved_1.kontr_id, V_ved_1.Strt_id
                            FROM          V_ved AS V_ved_1 INNER JOIN
                                                       (SELECT     V_saldoN_1.Ab_kart_oid, T_nach_saldo_1.Date_pokaz
                                                         FROM          T_nach_saldo AS T_nach_saldo_1 INNER JOIN
                                                                                V_saldoN AS V_saldoN_1 ON T_nach_saldo_1.OID = V_saldoN_1.mxoid) AS TSMX_1 ON 
                                                   V_ved_1.ab_kart_oid = TSMX_1.Ab_kart_oid
                            WHERE      (V_ved_1.ab_kart_oid BETWEEN 26808 AND 27008) AND (TSMX_1.Date_pokaz NOT BETWEEN CONVERT(DATETIME, '2018-01-01 00:00:00', 102) AND 
                                                   CONVERT(DATETIME, '2018-02-01 00:00:00', 102))
                            GROUP BY V_ved_1.kontr_id, V_ved_1.Strt_id) AS derivedtbl_2 ON derivedtbl_1.Strt_id = derivedtbl_2.Strt_id AND 
                      derivedtbl_1.kontr_id = derivedtbl_2.kontr_id
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39630342
Фотография Дедушка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имхо, стоит:
- написать версию сервера?
- привести план запроса

ну и конструкции CONVERT(DATETIME, '2018-02-01 00:00:00', 102) вызывают некое недоумение...
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39630356
Massa52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чингис,
Для начала надо бы переписать запрос - для читабельности
гдет - так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
;WITH TSMX AS
(SELECT V_saldoN.Ab_kart_oid, T_nach_saldo.Date_pokaz
 FROM T_nach_saldo INNER JOIN V_saldoN ON T_nach_saldo.OID = V_saldoN.mxoid
), 
derivedtbl_1 AS
(SELECT COUNT(V_ved.ab_kart_oid) AS cAB, V_ved.kontr_id, V_ved.Strt_id, V_ved.STRTNAME, V_ved.Kontroller_Name
 FROM V_ved INNER JOIN TSMX ON V_ved.ab_kart_oid = TSMX.Ab_kart_oid
 WHERE (V_ved.ab_kart_oid BETWEEN 26808 AND 27008)
 GROUP BY V_ved.kontr_id, V_ved.Strt_id, V_ved.STRTNAME, V_ved.Kontroller_Name
)
derivedtbl_2 AS
(SELECT COUNT(V_ved_1.ab_kart_oid) AS cAB, V_ved_1.kontr_id, V_ved_1.Strt_id
 FROM V_ved AS V_ved_1 INNER JOIN TSMX AS TSMX_1 ON V_ved_1.ab_kart_oid = TSMX_1.Ab_kart_oid
 WHERE (V_ved_1.ab_kart_oid BETWEEN 26808 AND 27008) AND (TSMX_1.Date_pokaz NOT BETWEEN '20180101' AND '2018-02-01')
 GROUP BY V_ved_1.kontr_id, V_ved_1.Strt_id
)

SELECT derivedtbl_1.cAB, derivedtbl_1.kontr_id, derivedtbl_1.Strt_id, derivedtbl_2.cAB AS ns, derivedtbl_1.STRTNAME, derivedtbl_1.Kontroller_Name
FROM derivedtbl_1 LEFT OUTER JOIN derivedtbl_2 ON derivedtbl_1.Strt_id = derivedtbl_2.Strt_id AND 
                      derivedtbl_1.kontr_id = derivedtbl_2.kontr_id
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39630823
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чингис,

выполнение запроса оптимизируется не только по внешнему виду запроса, но и по составу и количеству данных.
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39631112
Чингис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Massa52,

на счет with-a не знал первый раз вижу спс.
а если проц использовать?
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39631113
Чингис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дедушка,

дд скл сервер 2005
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39631330
AlanDenton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы бы для начала показали реальный план выполнения (и прикрепили его файлом sqlplan).
Показали статистику логических чтений. Какие индексы и тд. То так на глаз конечно можно, но мало эффективно будет.
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39631369
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чингис,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select
 c.kontr_id, c.Strt_id, c.STRTNAME, c.Kontroller_Name,
 count(*) as cAB,
 nullif(sum(sum(case when a.Date_pokaz not between '20180101' and '20180201' then 1 else 0)) over (partition by c.kontr_id, c.Strt_id), 0) as ns
from
 T_nach_saldo a join
 V_saldoN b on a.OID = b.mxoid join
 V_ved c on c.ab_kart_oid = b.ab_kart_oid
where
 b.ab_kart_oid between 26808 and 27008
group by
 c.kontr_id, c.Strt_id, c.STRTNAME, c.Kontroller_Name;
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39631427
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

"over (partition..." - как бы да, но у автора темы 2005-й, в чем он честно признался.
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39631446
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAPкак бы да, но у автора темы 2005-й,Хотите сказать, что в 2005 нет предложения over? Уверены?
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39631473
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЧингисДедушка,

дд скл сервер 2005

дд Чингис, вы часто используете "дд" , это что - "дурдом"?
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39631476
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmAndy_OLAPкак бы да, но у автора темы 2005-й,Хотите сказать, что в 2005 нет предложения over? Уверены?
Конечно, не уверен.

Просто зашел на официальную документацию и прочитал фразу "THIS TOPIC APPLIES TO: SQL Server (starting with 2008 )".

Но если работает на 2005-м - таки замечательно. Вы это лично проверяли?
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39631480
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

Впрочем, можете не отвечать, вот здесь автор убедился, что на 2005-м работает.
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39631504
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAPinvmпропущено...
Хотите сказать, что в 2005 нет предложения over? Уверены?
Конечно, не уверен.

Просто зашел на официальную документацию и прочитал фразу "THIS TOPIC APPLIES TO: SQL Server (starting with 2008 )".

Но если работает на 2005-м - таки замечательно. Вы это лично проверяли?
официальная документация
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39631838
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff,

Вы свою ссылку не открывали? Там прямо в верхей части страницы обычным шрифтом - " Это содержимое было выведено из использования и, возможно, не будет обновляться в будущем. Продукт, служба или технология, упомянутые в этом содержимом, больше не поддерживаются".
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39631856
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAPfelix_ff,

Вы свою ссылку не открывали? Там прямо в верхей части страницы обычным шрифтом - " Это содержимое было выведено из использования и, возможно, не будет обновляться в будущем. Продукт, служба или технология, упомянутые в этом содержимом, больше не поддерживаются".Прикольно. Наверно, это относится к версии сервера (SQL2005)
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39631883
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAP,

а вы считаете правильно смотреть документацию от продукта версией выше которая необходима?

для 2012 инстанса наверное в документацию к 2017 полезете? ну удачи.
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39631984
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff,

Коллега, поймите правильно - в официальной документации на OVER есть упоминание, что работает начиная с 2008-й версии. Но. Мы оба прекрасно понимаем, что веселые индусы в Редмонде просто поленились написать, что в 2005-м тоже работает, но не всё и не так кошерно.
Тем не менее - я привел актуальную ссылку, оговорив, что в реальности все немного не так, Вы кинули ссылку, в которой написана, что она устарела и никто не смотрит, что в ней осталось висеть.

Мы оба правы. Просто когда Вы кинете такую ссылку новичку на форуме, он прочтет в верхней части, что все устарело - и подумает про Вас плохо.

Я тоже когда думаю о Вас - думаю о Вас плохо, но по другой причине, не связанной с документацией на MSSQL...
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39632037
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAPпоймите правильно - в официальной документации на OVER есть упоминание, что работает начиная с 2008-й версии.Вам следует знать, что в актуальной документации не упоминаются версии, снятые с поддержки.
Для таких версий есть отдельная документация . В которой легко находится желаемое .
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39632041
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

Коллега, Вы же понимаете, что V_ved - это view, внутри которой строки из ОСВ с полями контрагента kontr_id и идентификатором Strt_id и сцепка со справочниками, из которых берутся STRTNAME и Kontroller_Name.

Далее идет присоединение по ab_kart_oid. Так может быть, не рекомендовать over, а таки совсем немного подумать и предложить автору темы заскриптовать view и выложить сюда, чтобы сначала сделать group by kontr_id ,Strt_id ,ab_kart_oid, а потом уже присоединять справочники.
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39632043
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

Или Вы хотите научить молодого разработчика сложностям, а потом взять с него немного шекелей за платную консультацию, когда тормозить будет неожиданно сильнее, а он уже без наркомовских 100 грамм не поймет, что и как?
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39632064
Чингис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

это добрый день
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39632065
Чингис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAP,

скиньте мне литературу
я оказ ограничился только Мартином Грубером
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39632073
Чингис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmЧингис,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select
 c.kontr_id, c.Strt_id, c.STRTNAME, c.Kontroller_Name,
 count(*) as cAB,
 nullif(sum(sum(case when a.Date_pokaz not between '20180101' and '20180201' then 1 else 0)) over (partition by c.kontr_id, c.Strt_id), 0) as ns
from
 T_nach_saldo a join
 V_saldoN b on a.OID = b.mxoid join
 V_ved c on c.ab_kart_oid = b.ab_kart_oid
where
 b.ab_kart_oid between 26808 and 27008
group by
 c.kontr_id, c.Strt_id, c.STRTNAME, c.Kontroller_Name;



ругается он

Msg 102, Level 15, State 1, Line 5
Incorrect syntax near ')'.
...
Рейтинг: 0 / 0
Оптимизация запроса
    #39632075
Чингис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и как у вас все просто
у вас генератор оптимизатор или построитель скл установлен?
...
Рейтинг: 0 / 0
25 сообщений из 41, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Оптимизация запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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