Giri Bkm Ответов: 1

Я создал сводный запрос. Как уменьшить эту скорость запросов в SQL server 2005?


Привет,
Это мой вопрос. Я хочу уменьшить скорость запроса для этого запроса. Как оптимизировать этот запрос?

Declare
	@Pivv NVarchar(Max),
	@Query NVarchar(Max),
	@Pivv1 NVarchar(Max),
	@Columns NVarchar(Max)

Select
	@Pivv = Coalesce(@Pivv + ',' , '') + 
		    Quotename(MatchType + '_' + '_Name'),
	@Pivv1 = Coalesce(@Pivv1 + ',' , '') + 
		     Quotename('HighestRunsAndWicketsIn' + MatchType),
	@Columns = Isnull(@Columns + ',', '') +
			   'Max(' + (MatchType + '_' + '_Name') + ') As ' + (MatchType + '_' + '_Name') +
			   ',' +
			   'Max(' + ('HighestRunsAndWicketsIn' + MatchType) + ') As ' + ('HighestRunsAndWicketsIn' + MatchType)
From
	PlayersCareerBatting t Join PlayersBioDataNew a
On
	t.Id=a.Id
Group By
	MatchType

Set @Query=
		'Select
			''Batting'',
			' + @Columns + '
		From (
				Select
					MatchType + ''_'' + ''_Name'' As Type1,
					FirstName + '' '' + MiddleName + '' '' + LastName As Runs1,
					''HighestRunsAndWicketsIn'' + MatchType As Type,
					RunsScored As Runs
				From ( 
						Select 
							FirstName, 
							MiddleName,
							LastName, 
							MatchType, 
							RunsScored
						From (
								Select 
									s.Id, 
									FirstName, 
									MiddleName,
									LastName, 
									MatchType, 
									RunsScored, 
									Row_Number() Over(Partition By MatchType Order By RunsScored Desc) rn
								From 
									PlayersCareerBatting s Join PlayersBioDataNew a 
								On s.Id=a.Id
							 ) x
						Where rn=1
					 ) x2
			 ) x3
		Pivot 
			(
				Max(Runs1) For Type1 In (' + @Pivv + ')
			) x4
		Pivot
			(
				Max(Runs) For Type In (' + @Pivv1 + ')
			) x5

		Union All

		Select
			''Bowling'',
			' + @Columns + '
		From (
				Select
					MatchType + ''_'' + ''_Name'' As Type1,
					FirstName + '' '' + MiddleName + '' '' + LastName As Wickets1,
					''HighestRunsAndWicketsIn'' + MatchType As Type,
					Wickets As Wickets
				From ( 
						Select 
							FirstName, 
							MiddleName,
							LastName,
							MatchType, 
							Wickets
						From (
								Select 
									s.Id, 
									FirstName, 
									MiddleName,
									LastName, 
									MatchType, 
									Wickets, 
									Row_Number() Over(Partition By MatchType Order By Wickets Desc) rn
								From 
									PlayersBowlingCareer s Join PlayersBioDataNew a 
								On s.Id=a.Id
							 ) x6
						Where rn=1
					 ) x7
			 ) x8 
		Pivot 
			(
				Max(Wickets1) For Type1 In (' + @Pivv + ')
			) x9
		Pivot
			(
				Max(Wickets) For Type In (' + @Pivv1 + ')
			) x10'

Exec(@Query)


Заранее спасибо

Что я уже пробовал:

На самом деле я проверил некоторые пункты, приведенные в интернете, но он не использует для меня

Manfred Rudolf Bihy

Снижение скорости запроса может быть достигнуто путем усложнения запроса. Поскольку вы не указали, на какой фактор вы хотели бы уменьшить скорость, это довольно трудно сказать.
Это также может быть случай, когда вы просто хотите ускорить свой запрос, но вы не просили об этом. ;)

Maciej Los

Уменьшите количество подзапросов...

CHill60

Виртуальная пятерка!

Maciej Los

Спасибо, Кэролайн. Я думал отправить его в качестве ответа, но ... ..

Giri Bkm

Ой! Извините, но этот запрос сейчас работает медленно. Я хочу выполнить этот запрос еще быстрее
Заранее спасибо

1 Ответов

Рейтинг:
2

Maciej Los

Короче говоря: я бы сократил количество подзапросов!

Для получения более подробной информации, пожалуйста, смотрите:
производительность запросов[^]
Настройка производительности SQL: Топ-5 способов поиска медленных запросов[^]
Семь грехов против производительности TSQL - простой разговор[^]


Giri Bkm

Мне очень жаль. Я не хочу сокращать. Я хочу увеличить скорость этого запроса. Пожалуйста, дайте решение для того, как я могу увеличить скорость этого запроса. Заранее спасибо

CHill60

Чтобы увеличить скорость выполнения запроса, уменьшите количество подзапросов. Ваш запрос слишком сложен.
Построение динамического sql также является грязным для нас, чтобы следовать без каких - либо данных- замените это

Exec(@Query)
с
Print @Query
и поделись последним запросом.
В качестве альтернативы поделитесь некоторыми образцами данных и ожидаемыми результатами и опишите, что вы на самом деле пытаетесь сделать

Maciej Los

Хороший совет!

Maciej Los

Кажется, ты не понимаешь... Ряд подзапросов влияет на производительность запросов.

Giri Bkm

Но я хочу, чтобы подзапросы, а также я не знаю, как уменьшить подзапросы

Giri Bkm

Выбрать
"Ватин",
Макс(ИПЛ__наименование) как IPL__наименование,максимум(HighestRunsAndWicketsInIPL) как HighestRunsAndWicketsInIPL,Макс(тест__наименование) в качестве пробных__наименование,максимум(HighestRunsAndWicketsInTest) как HighestRunsAndWicketsInTest,Макс(T20I__наименование) в качестве T20I__наименование,максимум(HighestRunsAndWicketsInT20I) как HighestRunsAndWicketsInT20I,Макс(Оди__наименование) как Оди__наименование,максимум(HighestRunsAndWicketsInODI) как HighestRunsAndWicketsInODI
От (
Выбрать
MatchType + '_' + '_Name' As Type1,
FirstName + ''+ MiddleName + '' + LastName As Runs1,
'HighestRunsAndWicketsIn' + MatchType Как Тип,
RunsScored Как Работает
От (
Выбрать
имя,
Среднее имя,
фамилия,
При этом,
RunsScored
От (
Выбрать
С. Идентификатор,
а.имя,
а.Отчество,
а.фамилия,
С. При этом,
С. RunsScored,
Функции row_number() над(раздел по того, при этом по RunsScored по убыванию) рН
От
PlayersCareerBatting s Присоединяйтесь к PlayersBioDataNew a
На S.ИД=а.Идентификатор
) икс
Где rn=1
) x2
) x3
Стержень
(
Макс(Runs1) для type1 в ([ИПЛ__наименование],[тест__наименование],[T20I__наименование],[Оди__наименование])
) x4
Стержень
(
Макс. (Работает) Для Ввода ([HighestRunsAndWicketsInIPL],[HighestRunsAndWicketsInTest],[HighestRunsAndWicketsInT20I],[HighestRunsAndWicketsInODI])
) x5

Союз

Выбрать
"Боулинг",
Макс(ИПЛ__наименование) как IPL__наименование,максимум(HighestRunsAndWicketsInIPL) как HighestRunsAndWicketsInIPL,Макс(тест__наименование) в качестве пробных__наименование,максимум(HighestRunsAndWicketsInTest) как HighestRunsAndWicketsInTest,Макс(T20I__наименование) в качестве T20I__наименование,максимум(HighestRunsAndWicketsInT20I) как HighestRunsAndWicketsInT20I,Макс(Оди__наименование) как Оди__наименование,максимум(HighestRunsAndWicketsInODI) как HighestRunsAndWicketsInODI
От (
Выбрать
MatchType + '_' + '_Name' As Type1,
FirstName + ''+ MiddleName + '' + LastName As Wickets1,
'HighestRunsAndWicketsIn' + MatchType Как Тип,
Калиток Калитки
От (
Выбрать
имя,
Среднее имя,
фамилия,
При этом,
Калитки
От (
Выбрать
С. Идентификатор,
а.имя,
а.Отчество,
а.фамилия,
С. При этом,
С. калитки,
Функции row_number() над(раздел по того, при этом купить калитки по убыванию) рН
От
PlayersBowlingCareer s Присоединяйтесь к PlayersBioDataNew a
На S.ИД=а.Идентификатор
) x6
Где rn=1
) x7
) x8
Стержень
(
Макс(Wickets1) для type1 в ([ИПЛ__наименование],[тест__наименование],[T20I__наименование],[Оди__наименование])
) x9
Стержень
(
Макс(Калитки) Для Ввода Текста ([HighestRunsAndWicketsInIPL],[HighestRunsAndWicketsInTest],[HighestRunsAndWicketsInT20I],[HighestRunsAndWicketsInODI])
) x10