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

Откуда: Кишинёв
Сообщений: 6724
-- Microsoft SQL Server 2008 (SP3) - 10.0.5500.0 (X64) 
-- SET SHOWPLAN_TEXT ON OFF
-- SET SHOWPLAN_XML ON OFF
DECLARE	 @P1	Int
	,@P2	Int
	,@P3	Int
	,@P4	Int = 1

SELECT	Top(10) *
FROM	master.dbo.spt_values
WHERE	@P1 IS NULL AND (@P2 IS NULL OR @P3 IS NULL)
	AND number = @P4	-- Закоментить
Видем в плане Filter с выражением
<number = @P4>Statup Expression
С условием[@P1] IS NULL AND [@P2] IS NULL OR [@P3] IS NULL
Без[@P1] IS NULL AND ([@P2] IS NULL OR [@P3] IS NULL)
По результатам всевозможных запросов баг именно отображения, а не выполнения.
Т.е. сервер генерирует левый план (XML/Text неважно) для клиента:
            |--Filter(WHERE:(STARTUP EXPR([@P1] IS NULL AND [@P2] IS NULL OR [@P3] IS NULL)))

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

Позырьте на последних сборках.
3 май 12, 15:32    [12502028]     Ответить | Цитировать Сообщить модератору
 Re: Мелкий Баг, Отображение в плане, Filter : Startup Expression  [new]
Andrey Sribnyak
Member

Откуда: Киев
Сообщений: 600
По идее это из-за того, что на момент выполнения значение переменной @P4 считается не определенным
но recompile спасает ситуацию

DECLARE	 @P1	Int
	,@P2	Int
	,@P3	Int
	,@P4	Int = 1

SELECT	Top(10) *
FROM	master.dbo.spt_values
WHERE	@P1 IS NULL AND (@P2 IS NULL OR @P3 IS NULL)
	AND number = @P4	-- Закоментить
option (recompile)
--OPTION ( OPTIMIZE FOR (@P4 = 1) )
3 май 12, 16:45    [12502811]     Ответить | Цитировать Сообщить модератору
 Re: Мелкий Баг, Отображение в плане, Filter : Startup Expression  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Andrey Sribnyak
По идее это из-за того, что на момент выполнения значение переменной @P4 считается не определенным
Ой придумываете с потолка причины. Определённость тут не причём. Видно что логика условия нарушена.
Andrey Sribnyak
но recompile спасает ситуацию
Recompile убивает переменные, ни о каком Startup речи уже идти не может в принципе.
Filter то изчезает. А при @P1 = 1 и весь запрос схлопнулся в нуль.
3 май 12, 16:53    [12502913]     Ответить | Цитировать Сообщить модератору
 Re: Мелкий Баг, Отображение в плане, Filter : Startup Expression  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Жду кто проверит на Denaly (2012).
3 май 12, 16:55    [12502928]     Ответить | Цитировать Сообщить модератору
 Re: Мелкий Баг, Отображение в плане, Filter : Startup Expression  [new]
Andrey Sribnyak
Member

Откуда: Киев
Сообщений: 600
Mnior
Жду кто проверит на Denaly (2012).


|--Top(TOP EXPRESSION:((10)))
|--Compute Scalar(DEFINE:([Expr1003]=CONVERT(nvarchar(35),[mssqlsystemresource].[sys].[spt_values].[name],0), [Expr1004]=CONVERT(nchar(3),[mssqlsystemresource].[sys].[spt_values].[type],0)))
|--Nested Loops(Inner Join, OUTER REFERENCES:([mssqlsystemresource].[sys].[spt_values].[name], [mssqlsystemresource].[sys].[spt_values].[number], [mssqlsystemresource].[sys].[spt_values].[type]))
|--Filter(WHERE:(STARTUP EXPR([@P1] IS NULL AND [@P2] IS NULL OR [@P3] IS NULL)))
| |--Index Seek(OBJECT:([mssqlsystemresource].[sys].[spt_values].[ix2_spt_values_nu_nc]), SEEK:([mssqlsystemresource].[sys].[spt_values].[number]=[@P4]) ORDERED FORWARD)
|--Clustered Index Seek(OBJECT:([mssqlsystemresource].[sys].[spt_values].[spt_valuesclust]), SEEK:([mssqlsystemresource].[sys].[spt_values].[type]=[mssqlsystemresource].[sys].[spt_values].[type] AND [mssqlsystemresource].[sys].[spt_values].[number]=[mssqlsystemresource].[sys].[spt_values].[number] AND [mssqlsystemresource].[sys].[spt_values].[name]=[mssqlsystemresource].[sys].[spt_values].[name]) LOOKUP ORDERED FORWARD)


Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
Feb 10 2012 19:39:15
Copyright (c) Microsoft Corporation
Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
3 май 12, 16:59    [12502968]     Ответить | Цитировать Сообщить модератору
 Re: Мелкий Баг, Отображение в плане, Filter : Startup Expression  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Ах да, bug на connection.
7 май 12, 16:32    [12520656]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить