Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Обыдденое: оптимизация вложенных запросов  [new]
PerfGuy
Member

Откуда:
Сообщений: 19
Всем привет,

Подскажите пожалуйста сможете ли посоветовать как оптимизировать ряд повторяющихся подзапросов в которых изменяется только один из ключей поиска(в примере ниже alias):

      .........
      select string_value from stock_vars var1
       where task.stock_id = var1.stock_id
        and var1.alias = 'stockitId'
      ) as STOCKID
      ,(
      select string_value from stock_vars var1
       where task.stock_id = var1.stock_id
        and var1.alias = 'stocktNumber'
      ) as STOCKNUMBER
     ,(
      select string_value from stock_vars var1
       where task.stock_id = var1.stock_id
        and var1.alias = 'stockTitle'
      ) as STOCKTTITLE 
     ,(
     .......


вложенных запросов может быть очень много.
6 июн 14, 17:20    [16134244]     Ответить | Цитировать Сообщить модератору
 Re: Обыдденое: оптимизация вложенных запросов  [new]
Glory
Member

Откуда:
Сообщений: 104760
CASE или PIVOT
6 июн 14, 17:21    [16134257]     Ответить | Цитировать Сообщить модератору
 Re: Обыдденое: оптимизация вложенных запросов  [new]
PerfGuy
Member

Откуда:
Сообщений: 19
Glory
CASE или PIVOT

Glory cпасибо за совет. А не могли бы вы пример добавить, чтобы понять как имплементировать?.
6 июн 14, 17:54    [16134480]     Ответить | Цитировать Сообщить модератору
 Re: Обыдденое: оптимизация вложенных запросов  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4807
Вот индус специально для вас старался

http://blog.sqlauthority.com/2008/06/07/sql-server-pivot-and-unpivot-table-examples/
6 июн 14, 18:08    [16134542]     Ответить | Цитировать Сообщить модератору
 Re: Обыдденое: оптимизация вложенных запросов  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
a_voronin,

Уйня там всё, надо чтобы человек понял. А там для тех кто понимает и применяет новые фишечки новой версии скуля.
PIVOT вообще вредно показывать молодым, они думают что это элемент языка, а не всего-лишь надстройка над ним, которая сама пишет CASE, притом довольно неудобно.
6 июн 14, 21:21    [16135372]     Ответить | Цитировать Сообщить модератору
 Re: Обыдденое: оптимизация вложенных запросов  [new]
PerfGuy
Member

Откуда:
Сообщений: 19
Mnior
a_voronin,

Уйня там всё, надо чтобы человек понял. А там для тех кто понимает и применяет новые фишечки новой версии скуля.
PIVOT вообще вредно показывать молодым, они думают что это элемент языка, а не всего-лишь надстройка над ним, которая сама пишет CASE, притом довольно неудобно.


Mnior Вы бы не могли набросать небольшой пример, с использованием CASE?
12 июн 14, 13:26    [16158592]     Ответить | Цитировать Сообщить модератору
 Re: Обыдденое: оптимизация вложенных запросов  [new]
Glory
Member

Откуда:
Сообщений: 104760
PerfGuy
небольшой пример, с использованием CASE?

Вместо каждого вашего подзапроса пишите CASE с проверкой alias
12 июн 14, 13:30    [16158608]     Ответить | Цитировать Сообщить модератору
 Re: Обыдденое: оптимизация вложенных запросов  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
;WITH [dbo.vwStockVars] AS (	-- Сразу VIEW сделать и не парится потом
	SELECT	S.stock_id
		-- alias строковый - это изврат, там должен быть его ID, а названия хранятся в справочнике. Про 3ю нормальную форму слышал?
		-- string_value - Про SQL_Variant не слышал?
	,	Max(CASE WHEN S.alias = 'stockitId'	THEN S.string_value END)	AS stockitId
	,	Max(CASE WHEN S.alias = 'stocktNumber'	THEN S.string_value END)	AS stocktNumber
	,	Max(CASE WHEN S.alias = 'stockTitle'	THEN S.string_value END)	AS stockTitle
	FROM	dbo.Stock_Vars	S	-- CamelCase вааще-то стандарт: stock_vars -> StockVars, string_value -> StringValue
	GROUP BY S.stock_id
)	SELECT	*
	FROM	dbo.Task		T
LEFT	JOIN	[dbo.vwStockVars]	V ON V.stock_id = T.stock_id
12 июн 14, 20:59    [16159597]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить