Re: grösserer von zwei Werten in Where-Klausel
- From: Hannes Brunner <bruhan12@xxxxxx>
- Date: Fri, 10 Mar 2006 13:21:19 +0100
Hallo Frank,
Frank Kalis schrieb:
"Hannes Brunner" schrieb:
da unterschätzt du aber den Abfrageoptimierer des SQL Servers. Guck dir
doch mal die Ausführungspläne an und du wirst sehen dass in beiden
Fällen die gleiche Strategie, nämlich ein Custered Index Scan, gewählt wird.
Wirklich?
ja, bei mir schon.
SET SHOWPLAN_TEXT ON
DECLARE @a INT, @b INT
SELECT @a = 11008, @b = 11019
SELECT *
FROM Orders
WHERE OrderID = CASE WHEN @a>@b THEN @a ELSE @b END
DECLARE @final INT
SET @final = CASE WHEN @a>@b THEN @a ELSE @b END
SELECT *
FROM Orders
WHERE OrderID = @final
StmtText
-----------------------------------------------------------------------------------
DECLARE @a INT, @b INT
SELECT @a = 11008, @b = 11019
SELECT *
FROM Orders
WHERE OrderID = CASE WHEN @a>@b THEN @a ELSE @b END
(2 row(s) affected)
StmtText
--------------------------------------------------------------------------------------------------------------------------------------------
|--Clustered Index Scan(OBJECT:([Northwind].[dbo].[Orders].[ShippedDate]),
WHERE:([Orders].[OrderID]=If ([@a]>[@b]) then [@a] else [@b]))
Was ist denn hier passiert? Der Clustered Index in deiner Orders-Tabelle
liegt auf ShippedDate und nicht auf OrderID? Da hast du mich ja sauber
ausgetrickst ;)
(1 row(s) affected)
StmtText
-------------------------------------------------------------------------
DECLARE @final INT
SET @final = CASE WHEN @a>@b THEN @a ELSE @b END
SELECT *
FROM Orders
WHERE OrderID = @final
(2 row(s) affected)
StmtText
--------------------------------------------------------------------------------------------------------------------------
|--Bookmark Lookup(BOOKMARK:([Bmk1000]),
OBJECT:([Northwind].[dbo].[Orders]))
|--Index Seek(OBJECT:([Northwind].[dbo].[Orders].[PK_Orders]),
SEEK:([Orders].[OrderID]=[@final]) ORDERED FORWARD)
Ok, ich sehe ein, wenn man im WHERE nicht in der Clustered Index Spalte
sucht ist deine Version besser. Allerdings musst du wohl eingestehen
dass dein Beispiel unglücklich gewählt ist :-p
Gruß
Hannes
.
- References:
- grösserer von zwei Werten in Where-Klausel
- From: stefan
- Re: grösserer von zwei Werten in Where-Klausel
- From: Hannes Brunner
- Re: grösserer von zwei Werten in Where-Klausel
- From: Frank Kalis
- grösserer von zwei Werten in Where-Klausel
- Prev by Date: Re: grösserer von zwei Werten in Where-Klausel
- Next by Date: Re: Kopieren aller User Stored Procedures
- Previous by thread: Re: grösserer von zwei Werten in Where-Klausel
- Next by thread: SSIS / ersetzen von NULL
- Index(es):
Relevant Pages
|