powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как ускорить запрос?
12 сообщений из 12, страница 1 из 1
Как ускорить запрос?
    #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
Как ускорить запрос?
    #39884202
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проанализировать план выполнения, найти проблемные места, устранить.
Как-то так.
...
Рейтинг: 0 / 0
Как ускорить запрос?
    #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
Как ускорить запрос?
    #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
Как ускорить запрос?
    #39884302
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Борис Гаркун,

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

Попробуйте развернуть OR в UNION ALL. Получится громоздко, но возможно быстрее, если есть правильные индексы. Ну а вообще, как уже сказали, надо смотреть план.
...
Рейтинг: 0 / 0
Как ускорить запрос?
    #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
Как ускорить запрос?
    #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
Как ускорить запрос?
    #39885057
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя сразу бросается в глаза корреллированный подзапрос. Попытаться для начала от него избавиться. И, ты бы, того, чтя здешние рекомендации, закинул бы create table ... insert into ...
...
Рейтинг: 0 / 0
Как ускорить запрос?
    #39885088
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatУ тебя сразу бросается в глаза корреллированный подзапрос. Попытаться для начала от него избавиться.Не надо следствия ваших детских психологических травм, связанных с коррелированными подзапросами, превращать в якобы общепринятые рекомендации. При ответах уточняйте этот момент.
...
Рейтинг: 0 / 0
Как ускорить запрос?
    #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
Как ускорить запрос?
    #39885246
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модератор: Удалено.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как ускорить запрос?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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