powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Можно ли оптимизировать запрос
13 сообщений из 38, страница 2 из 2
Можно ли оптимизировать запрос
    #38652417
Challenger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тормозит вот эта часть

Код: sql
1.
and ((b.string_value IS NULL) OR (b.string_value not in (select ExaminationID from lab.dbo.tbImgInfo where (ExaminationID IS NOT NULL))))



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

Код: sql
1.
and ((b.string_value IS NULL) OR (b.string_value not in (select ExaminationID from lab.dbo.tbImgInfo where (ExaminationID IS NOT NULL))))



Если ее убрать, то запрос выполняется моментально

Вот вам и предлагали выше поменять на not exists, тем более надеюсь ExaminationID типа int
и string_value для отобранных данных тоже типа int => ускорим работу при работе с int:

Код: sql
1.
and not exists (select 1 from lab.dbo.tbImgInfo where ExaminationID = CAST(b.string_value AS INT))
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #38652463
Challenger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зеленый админ,
вот так действительно намного лучше работает.
Код: sql
1.
and not exists (select 1 from lab.dbo.tbImgInfo where (ExaminationID = b.string_value))



К сожаление string_value вот такое 2.16.840.1.113669.632.10.20120401.111535306.1.20

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

В первоначальном варианте я написал
Код: sql
1.
where (a.image_id>=11111)



но реально здесь переменная
Код: sql
1.
where (a.image_id>=@image_id)



запрос начинает тормозить при некоторых значениях @image_id, например при таком 57400,
хотя поле image_id входит в Primary key.

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

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

теперь запрос стал таким

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select top 30 a.image_id,a.patient_id,a.updated_date,a.updated_time,
lab.dbo.RmDateToDT(a.updated_date,a.updated_time) as upd_date,a.image_date,a.image_time,a.image_type,a.image_subtype,a.image_format,b.string_value,c.external_id 
from Romexis_db.dbo.RIM_Image_Info a(nolock) 
left join Romexis_db.dbo.RIM_Image_Attrib b(nolock) on (b.image_id = a.image_id) and (b.attrib_type=171) 
left join Romexis_db.dbo.RRM_Person c(nolock)  on (c.person_id = a.patient_id) 
where (a.image_id>=57400) 
and not exists (select 1 from lab.dbo.tbImgInfo(nolock) where (seq=a.image_id))
and not exists (select 1 from lab.dbo.tbImgInfo(nolock) where (ExaminationID = b.string_value))
order by a.image_id



Но все равно тормозит при некоторых значениях @image_id, сейчас значение 57400
Вот план выполнения, во вложении

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
  |--Compute Scalar(DEFINE:([Expr1014]=[lab].[dbo].[RmDateToDT]([Romexis_db].[dbo].[RIM_Image_Info].[updated_date] as [a].[updated_date],[Romexis_db].[dbo].[RIM_Image_Info].[updated_time] as [a].[updated_time])))
       |--Top(TOP EXPRESSION:((30)))
            |--Nested Loops(Left Outer Join, OUTER REFERENCES:([a].[patient_id]))
                 |--Nested Loops(Left Anti Semi Join, OUTER REFERENCES:([b].[string_value]))
                 |    |--Nested Loops(Left Outer Join, WHERE:([Romexis_db].[dbo].[RIM_Image_Attrib].[image_id] as [b].[image_id]=[Romexis_db].[dbo].[RIM_Image_Info].[image_id] as [a].[image_id]))
                 |    |    |--Nested Loops(Left Anti Semi Join, WHERE:([lab].[dbo].[tbImgInfo].[seq]=[Romexis_db].[dbo].[RIM_Image_Info].[image_id] as [a].[image_id]))
                 |    |    |    |--Clustered Index Seek(OBJECT:([Romexis_db].[dbo].[RIM_Image_Info].[PK_RIM_IMAGE_INFO] AS [a]), SEEK:([a].[image_id] >= (57400)) ORDERED FORWARD)
                 |    |    |    |--Clustered Index Seek(OBJECT:([lab].[dbo].[tbImgInfo].[PK_ImgInfo]), SEEK:([lab].[dbo].[tbImgInfo].[seq] >= (57400)) ORDERED FORWARD)
                 |    |    |--Clustered Index Scan(OBJECT:([Romexis_db].[dbo].[RIM_Image_Attrib].[PK_RIM_IMAGE_ATTRIB] AS [b]), WHERE:([Romexis_db].[dbo].[RIM_Image_Attrib].[attrib_type] as [b].[attrib_type]=(171) AND [Romexis_db].[dbo].[RIM_Image_Attrib].[image_id] as [b].[image_id]>=(57400)))
                 |    |--Top(TOP EXPRESSION:((1)))
                 |         |--Nested Loops(Inner Join, OUTER REFERENCES:([Expr1017], [Expr1018], [Expr1016]))
                 |              |--Compute Scalar(DEFINE:(([Expr1017],[Expr1018],[Expr1016])=GetRangeThroughConvert([Romexis_db].[dbo].[RIM_Image_Attrib].[string_value] as [b].[string_value],[Romexis_db].[dbo].[RIM_Image_Attrib].[string_value] as [b].[string_value],(62))))
                 |              |    |--Constant Scan
                 |              |--Index Seek(OBJECT:([lab].[dbo].[tbImgInfo].[ix_ExaminationID]), SEEK:([lab].[dbo].[tbImgInfo].[ExaminationID] > [Expr1017] AND [lab].[dbo].[tbImgInfo].[ExaminationID] < [Expr1018]),  WHERE:(CONVERT_IMPLICIT(nvarchar(128),[lab].[dbo].[tbImgInfo].[ExaminationID],0)=[Romexis_db].[dbo].[RIM_Image_Attrib].[string_value] as [b].[string_value]) ORDERED FORWARD)
                 |--Clustered Index Seek(OBJECT:([Romexis_db].[dbo].[RRM_Person].[PK_RRM_PERSON] AS [c]), SEEK:([c].[person_id]=[Romexis_db].[dbo].[RIM_Image_Info].[patient_id] as [a].[patient_id]) ORDERED FORWARD)
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #38652851
Challenger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Много народу просило план выполнения. План выполнения запроса я выложил. И никто ничего не говорит.
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #38652885
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChallengerНо все равно тормозит при некоторых значениях @image_idПопробуйте option(recompile) добавить в запрос.ChallengerПлан выполнения запроса я выложилПлан был нужен актуальный, а не оценочный.
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #38652953
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChallengerИ никто ничего не говорит.
Зачем делается left join Romexis_db.dbo.RIM_Image_Attrib b, если в выходном наборе нет ни одного поля из этой таблицы ?
Что за функция lab.dbo.RmDateToDT ? Зачем она нужна ?
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #38652993
Challenger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GloryЗачем делается left join Romexis_db.dbo.RIM_Image_Attrib b, если в выходном наборе нет ни одного поля из этой таблицы ?


b.string_value используется

GloryЧто за функция lab.dbo.RmDateToDT ? Зачем она нужна ?

Так исторически сложилось преобразование даты, потому что дата хранится в корявом формате в устройстве

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
ALTER FUNCTION [dbo].[RmDateToDT] (@updated_date int,@updated_time int)
RETURNS datetime
AS
BEGIN	
	RETURN CONVERT(datetime,
						(right('0000'+ CAST((@updated_date / 10000) as varchar),4)+'-'+
						right('00'+ CAST((@updated_date / 100) as varchar),2)+'-'+
						right('00'+ CAST(@updated_date as varchar),2)+'T'+
						right('00'+ CAST((@updated_time / 10000000) as varchar),2)+':'+
						right('00'+ CAST((@updated_time / 100000) as varchar),2)+':'+
						right('00'+ CAST((@updated_time / 1000) as varchar),2)+'.000'),126);
END
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #38653003
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Challengerb.string_value используется
Все равно построение запроса режет газ
left join Romexis_db.dbo.RIM_Image_Attrib b - отдельно

от and not exists (select 1 from lab.dbo.tbImgInfo(nolock) where (ExaminationID = b.string_value))
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #38653048
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Challenger,

вместо скалярной UDF голимой попробовать выражение:
Код: sql
1.
CAST(STR(@updated_date)+' '+STUFF(STUFF(STUFF(REPLACE(STR(@updated_time,9),' ','0'),7,0,'.'),5,0,':'),3,0,':')AS DATETIME)
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #38653524
Crimean
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Challenger,

так вы ДВА плана покажите. быстрый и медленный.
...
Рейтинг: 0 / 0
13 сообщений из 38, страница 2 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Можно ли оптимизировать запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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