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

В некоторых случая запрос выполняется непозволительно долго, и система не дожидается ответа.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
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>=11111) and (a.image_id not in (select seq from lab.dbo.tbImgInfo where (seq=a.image_id))) 
        and ((b.string_value IS NULL) OR (b.string_value not in (select ExaminationID from lab.dbo.tbImgInfo where (ExaminationID IS NOT NULL))))
        order by a.image_id



Вносить изменения в структуру нельзя, добавлять индексы нельзя.
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #38646816
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
and (a.image_id not in (select seq from lab.dbo.tbImgInfo where (seq=a.image_id)))

это правда работает?
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #38646817
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChallengerВ некоторых случая запрос выполняется непозволительно долгоТогда почему вы решили, что проблема в запросе?
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #38646820
Challenger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shakill,
Это работает.
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #38646822
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shakill
Код: sql
1.
and (a.image_id not in (select seq from lab.dbo.tbImgInfo where (seq=a.image_id)))

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

Я тешу себя надеждой, что его можно заменить на что-то работающее быстрее.
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #38646825
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChallengerВносить изменения в структуру нельзя, добавлять индексы нельзя.
Купить процессоры, память, диски можно ?
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #38646834
Challenger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот структура, раз спрашиваете,

Код: 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.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
CREATE TABLE [dbo].[RIM_Image_Info](
	[image_id] [int] IDENTITY(1,1) NOT NULL,
	[history_id] [int] NOT NULL,
	[patient_id] [int] NOT NULL,
	[status] [int] NOT NULL,
	[updated_by] [int] NOT NULL,
	[updated_date] [int] NOT NULL,
	[updated_time] [int] NOT NULL,
	[doctor_id] [int] NULL,
	[image_size] [int] NOT NULL,
	[image_date] [int] NOT NULL,
	[image_time] [int] NOT NULL,
	[image_source] [int] NOT NULL,
	[image_type] [int] NOT NULL,
	[image_subtype] [int] NOT NULL,
	[image_format] [nvarchar](4) NULL,
	[bit_depth] [int] NOT NULL,
	[pixel_size] [int] NULL,
	[rotation_angle] [int] NULL,
	[is_mirrored] [int] NULL,
	[tooth_mask] [int] NULL,
	[tooth_mask_child] [int] NULL,
	[operator_id] [int] NULL,
 CONSTRAINT [PK_RIM_IMAGE_INFO] PRIMARY KEY CLUSTERED 
(
	[image_id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[RIM_Image_Info]  WITH CHECK ADD  CONSTRAINT [FK_RIM_IMAGE_INFO_1] FOREIGN KEY([patient_id])
REFERENCES [dbo].[RRM_Person] ([person_id])
GO

ALTER TABLE [dbo].[RIM_Image_Info] CHECK CONSTRAINT [FK_RIM_IMAGE_INFO_1]
GO


CREATE TABLE [dbo].[RIM_Image_Attrib](
	[attrib_id] [int] IDENTITY(1,1) NOT NULL,
	[history_id] [int] NOT NULL,
	[image_id] [int] NOT NULL,
	[status] [int] NOT NULL,
	[updated_by] [int] NOT NULL,
	[updated_date] [int] NOT NULL,
	[updated_time] [int] NOT NULL,
	[attrib_type] [int] NOT NULL,
	[int_value] [int] NOT NULL,
	[string_value] [nvarchar](2000) NULL,
	[double_value] [float] NULL,
 CONSTRAINT [PK_RIM_IMAGE_ATTRIB] PRIMARY KEY CLUSTERED 
(
	[attrib_id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[RIM_Image_Attrib]  WITH CHECK ADD  CONSTRAINT [FK_RIM_IMAGE_ATTRIB_1] FOREIGN KEY([image_id])
REFERENCES [dbo].[RIM_Image_Info] ([image_id])
GO

ALTER TABLE [dbo].[RIM_Image_Attrib] CHECK CONSTRAINT [FK_RIM_IMAGE_ATTRIB_1]
GO



CREATE TABLE [dbo].[RRM_Person](
	[person_id] [int] IDENTITY(1,1) NOT NULL,
	[history_id] [int] NOT NULL,
	[external_id] [nvarchar](64) NULL,
	[system_id] [nvarchar](32) NULL,
	[other_id] [nvarchar](64) NULL,
	[status] [int] NOT NULL,
	[updated_by] [int] NOT NULL,
	[updated_date] [int] NOT NULL,
	[updated_time] [int] NOT NULL,
	[title] [nvarchar](20) NULL,
	[first_name] [nvarchar](64) NULL,
	[second_name] [nvarchar](64) NULL,
	[third_name] [nvarchar](64) NULL,
	[last_name] [nvarchar](64) NULL,
	[maiden_name] [nvarchar](64) NULL,
	[nickname] [nvarchar](64) NULL,
	[name_suffix] [nvarchar](10) NULL,
	[initials] [nvarchar](10) NULL,
	[date_of_birth] [int] NULL,
	[date_of_death] [int] NULL,
	[gender] [nchar](1) NULL,
	[marital_status] [nchar](1) NULL,
	[nationality] [nchar](3) NULL,
	[language_id] [nchar](2) NULL,
	[occupation] [nvarchar](50) NULL,
 CONSTRAINT [PK_RRM_PERSON] PRIMARY KEY CLUSTERED 
(
	[person_id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO


/****** Object:  Table [dbo].[tbImgInfo]    Script Date: 05/20/2014 17:54:08 ******/

CREATE TABLE [dbo].[tbImgInfo](
	[seq] [int] NOT NULL,
	[CreateDate] [datetime] NOT NULL,
	[uploadUrl] [varchar](256) NULL,
	[ExaminationID] [varchar](128) NULL,
	[IsMinicopySended] [bit] NOT NULL,
	[IsPatientSended] [bit] NOT NULL,
	[uploadExaminationID] [uniqueidentifier] NULL,
	[Width] [int] NULL,
	[Height] [int] NULL,
	[SendSizeCount] [int] NOT NULL,
	[C_Type] [int] NULL,
	[C_SubType] [int] NULL,
 CONSTRAINT [PK_ImgInfo] PRIMARY KEY CLUSTERED 
(
	[seq] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[tbImgInfo] ADD  CONSTRAINT [DF_ImgInfo_CreateDate]  DEFAULT (getdate()) FOR [CreateDate]
GO

ALTER TABLE [dbo].[tbImgInfo] ADD  CONSTRAINT [DF_tbImgInfo_IsMinicopySended]  DEFAULT ((0)) FOR [IsMinicopySended]
GO

ALTER TABLE [dbo].[tbImgInfo] ADD  CONSTRAINT [DF_tbImgInfo_IsPatientSended]  DEFAULT ((0)) FOR [IsPatientSended]
GO

ALTER TABLE [dbo].[tbImgInfo] ADD  CONSTRAINT [DF_tbImgInfo_SizeSendCount]  DEFAULT ((0)) FOR [SendSizeCount]
GO
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #38646839
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChallengerВот структура, раз спрашиваете,
А про результат, который достигается этим запросом, тоже расскажите ?
Версию сервера покажите ? А может даже реальный план выполнения ?
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #38646868
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A таблица tbImgInfo случаем тоже не блокируется (в смысле туда добавить nolock или set transaction isolation level unrestricted)? Попробуй как быстро на сервере напрямую выполняется раз 10-20 .. частично для поиска тормозов можно пока условия упроистить (например исключив/заменив{на предопределённый список} where .. ..not in..(select..)and..not in(select..) )
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #38647349
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Измените запрос так, чтобы не было OR.
Во-вторых Ваше ТОП 30 с упорядочиванием приводит к сортировке, если в выборке несколько миллионов записей и больше - последствия будут катастрофичными.
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #38647421
Фотография Exproment
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав КолосовВаше ТОП 30 с упорядочиванием приводит к сортировке, если в выборке несколько миллионов записей и больше - последствия будут катастрофичными.
С чего вы это взяли ? Вроде сортировка идет по полю image_id, которое является кючем кластеризованного индекса. Откуда там возник сортировка ?
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #38647451
Crimean
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ExpromentВроде сортировка идет по полю image_id, которое является кючем кластеризованного индекса. Откуда там возник сортировка ?

сортировки не будет в случае, если для выполнения будет выбрана стратегия сканирования индекса, совпадающего с сортировкой. и тогда, к слову, при неверной оценке для выполнения запрошенного TOP 30 может потребоваться высканить чуть ли не все! а в противном случае выборка будет организована по-другому, реализована полностью, отсортирована и вам вернется TOP 30, как и просили

короче, нет универсального ответа на ваш вопрос. точнее он есть, но он не особо поможет - ставьте критерии выборки такие, чтобы запрос "сразу" и "эффективно" отбирал "достаточно мало" данных, тогда они будут дальше отсортированы и сделано TOP 30. но это фантастика
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #38647535
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shakill
Код: sql
1.
and (a.image_id not in (select seq from lab.dbo.tbImgInfo where (seq=a.image_id)))

это правда работает?
ChallengerShakill,
Это работает.

А сакральный смысл этого может кто-нибудь мне втолковать.
Или я совсем плох стал...
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #38647573
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks2, можно убрать where и смысл останется тем же, т.к. поля not null
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #38647579
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks2А сакральный смысл этого может кто-нибудь мне втолковать.Это альтернатива not exists. Для больших оригиналов
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #38649245
Challenger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пропадал я тут на некоторое время.

Сейчас вернулся - все перечитал внимательно, но так и не понял можно ли что-то сделать.
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #38649268
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно, я же написал. Уберите OR.
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #38649289
Challenger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GloryА про результат, который достигается этим запросом, тоже расскажите ?
Версию сервера покажите ? А может даже реальный план выполнения ?

Glory,
версия SQL
Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) Nov 24 2008 13:01:59 Copyright (c) 1988-2005 Microsoft Corporation Express Edition on Windows NT 6.1 (Build 7601: Service Pack 1)


План выполнения выложу чуть позже.

GloryА про результат, который достигается этим запросом, тоже расскажите ?


Выбираются записи по определенному критерию, которые еще не обработаны. Те, которые обработаны - фиксировались в сторонней таблице tbImgInfo.
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #38649293
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChallengerВыбираются записи по определенному критерию, которые еще не обработаны. Те, которые обработаны - фиксировались в сторонней таблице tbImgInfo.
И предложенный текст запроса является единственно возможным решением ?
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #38652383
Challenger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Glory, конечно нет.

Я как раз и спрашиваю про альтернативу.
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #38652385
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChallengerЯ как раз и спрашиваю про альтернативу.
Т.е. вы предлагаете написать свободное сочинение на тему "Выбираются записи по определенному критерию, которые еще не обработаны. Те, которые обработаны - фиксировались в сторонней таблице tbImgInfo." ?
Т.е. самим придумать "определенные критерии" и "еще не обработаны" ?
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #38652393
Challenger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет сочинения написать не предлагаю. Предлагаю просто подать идею как здесь изменить запрос.
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #38652400
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChallengerПредлагаю просто подать идею как здесь изменить запрос.
Посмотреть на план.
Выявить самые дорогие шаги.
Переписать их.
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #38652415
Crimean
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Challenger,

подумайте лучше над изменением "схемы данных". потому как если во главу угла ставить "моментальные" выборки - данные для них должны храниться "уже готовыми", то есть, как минимум, проиндексированными "под выборку". иначе (грубо! + уже писал же про это) у вас будет или (долгий?) скан с расчетами, пока не наберутся ваши TOP записей или полноценное выполнение запроса, чтобы после оставить ваши TOP записей. иногда, при определенном распределении данных, "достаточно" запинать оптимизатор так, чтобы он всегда работал по варианту "скан + расчет пока не наберется TOP"
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос
    #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
38 сообщений из 38, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Можно ли оптимизировать запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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