powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Можно ли оптимизировать запрос
25 сообщений из 38, страница 1 из 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
25 сообщений из 38, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Можно ли оптимизировать запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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