Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как ускорить запрос? / 12 сообщений из 12, страница 1 из 1
01.11.2019, 12:47
    #39884199
Как ускорить запрос?
Здравствуйте!

Есть запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT 
	s6.* 
	, st.col_tip_pokazanij
FROM temp_so6_09 s6
LEFT JOIN temp_so1_09 st -- тип показаний
	ON 
	st.link = (SELECT TOP 1 s.link FROM temp_so1_09 s WHERE (s.col_pl_kod = s6.col_ob_pl_kod OR s.col_dogovor = s6.col_ob_pl_kod ) AND s.col34 = s6.col_nomer_pu AND s.col_tip_pokazanij IS NOT NULL
	ORDER BY s.col14 DESC)


, который медленно работает.

Можно ли ускорить этот запрос?
...
Рейтинг: 0 / 0
01.11.2019, 12:50
    #39884202
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить запрос?
Проанализировать план выполнения, найти проблемные места, устранить.
Как-то так.
...
Рейтинг: 0 / 0
01.11.2019, 13:23
    #39884241
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить запрос?
Борис ГаркунМожно ли ускорить этот запрос?
Код: sql
1.
create index ... on temp_so1_09 (col_nomer_pu, col14) include (col_pl_kod, col_dogovor, col_tip_pokazanij, link)
...
Рейтинг: 0 / 0
01.11.2019, 14:53
    #39884295
Как ускорить запрос?
invmБорис ГаркунМожно ли ускорить этот запрос?
Код: sql
1.
create index ... on temp_so1_09 (col_nomer_pu, col14) include (col_pl_kod, col_dogovor, col_tip_pokazanij, link)


Спасибо.

Вы наверно имели в виду такой
Код: sql
1.
create index ... on temp_so1_09 (col34, col14) include (col_pl_kod, col_dogovor, col_tip_pokazanij, link)


?
...
Рейтинг: 0 / 0
01.11.2019, 15:10
    #39884302
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить запрос?
Борис Гаркун,

Да, col34
...
Рейтинг: 0 / 0
01.11.2019, 22:15
    #39884529
Mind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить запрос?
Борис Гаркун,

Попробуйте развернуть OR в UNION ALL. Получится громоздко, но возможно быстрее, если есть правильные индексы. Ну а вообще, как уже сказали, надо смотреть план.
...
Рейтинг: 0 / 0
04.11.2019, 19:29
    #39885048
Владимир Затуливетер
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить запрос?
Для вашей версии запроса:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
create index IDX1 on temp_so1_09 ( col34, col14 ) 
include ( col_pl_kod, col_dogovor, col_tip_pokazanij, link )
where col_tip_pokazanij is not null
go

create index IDX2 on temp_so1_09 ( link ) 
include ( col_tip_pokazanij )
go
...
Рейтинг: 0 / 0
04.11.2019, 19:31
    #39885050
Владимир Затуливетер
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить запрос?
Для версии с развернутым "OR":

Код: 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.
select
    s6.*
  , st.col_tip_pokazanij
from temp_so6_09 as s6
    cross apply (
        select top 1 t.link
        from (
            select top 1 s.link, col14
            from temp_so1_09 as s
            where s.col_pl_kod = s6.col_ob_pl_kod 
              and s.col34 = s6.col_nomer_pu
              and s.col_tip_pokazanij is not null
            order by s.col14 desc

            union all
    
            select top 1 s.link, col14
            from temp_so1_09 as s
            where s.col_dogovor = s6.col_ob_pl_kod
              and s.col34 = s6.col_nomer_pu
              and s.col_tip_pokazanij is not null
            order by s.col14 desc
        ) t
        order by t.col14 desc
    )
    left join temp_so1_09 as st on st.link = t.link
    
go

create index IDX1 on temp_so1_09 ( link ) 
include ( col_tip_pokazanij )
go

create index IDX2 on temp_so1_09 ( col34, col_dogovor, col14 ) 
include ( col_tip_pokazanij, link )
where col_tip_pokazanij is not null
go

create index IDX3 on temp_so1_09 ( col34, col_pl_kod, col14 ) 
include ( col_tip_pokazanij, link )
where col_tip_pokazanij is not null
go



если ничего не напутал... :)
...
Рейтинг: 0 / 0
04.11.2019, 20:12
    #39885057
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить запрос?
У тебя сразу бросается в глаза корреллированный подзапрос. Попытаться для начала от него избавиться. И, ты бы, того, чтя здешние рекомендации, закинул бы create table ... insert into ...
...
Рейтинг: 0 / 0
04.11.2019, 22:41
    #39885088
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить запрос?
fkthatУ тебя сразу бросается в глаза корреллированный подзапрос. Попытаться для начала от него избавиться.Не надо следствия ваших детских психологических травм, связанных с коррелированными подзапросами, превращать в якобы общепринятые рекомендации. При ответах уточняйте этот момент.
...
Рейтинг: 0 / 0
05.11.2019, 00:45
    #39885112
Gerros
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить запрос?
Гавриленко Сергей Алексеевич
Не надо следствия ваших детских психологических травм ... превращать в якобы общепринятые рекомендации.
Тогда так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
--Если temp_so1_09.link уникален для каждой строки из temp_so6_09:
SELECT
  s6.* 
, ( SELECT TOP 1 col_tip_pokazanij
FROM temp_so1_09 s -- тип показаний
WHERE (s.col_pl_kod = s6.col_ob_pl_kod OR s.col_dogovor = s6.col_ob_pl_kod)
  AND s.col34 = s6.col_nomer_pu
  AND s.col_tip_pokazanij IS NOT NULL
ORDER BY s.col14 DESC)
FROM temp_so6_09 s6

Код: sql
1.
2.
--Порядок полей в индексе доработать напильником:
create nonclusterd index XXX on temp_so1_09( col14, col_pl_kod, col_dogovor, col34, col_tip_pokazanij) desc
...
Рейтинг: 0 / 0
05.11.2019, 13:21
    #39885246
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить запрос?
Модератор: Удалено.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как ускорить запрос? / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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