Squicky
Lt. Commander
- Registriert
- Sep. 2002
- Beiträge
- 1.422
Hallo
Folgende Situation:
Benutzt wird Microsoft SQL Server 2012.
Eine Tabelle (tab) hat 8 Spalten (sp1, sp2, …, sp8) und ca. 2.000.000 Zeilen.
„sp1“ ist von Typ „INT“.
Variante 1:
Variante 2:
Beide Varianten bringen das gleiche Ergebnis zurück (7 Zeilen).
Variante 1 braucht dafür (deutlich) weniger wie 1 Sekunde.
Variante 2 braucht dafür ca. 20 Sekunden.
Warum genau braucht Variante 2 so viel Zeit?
P.S.: Hier ist ein „dirty workaround“:
Variante 3:
Variante 3 braucht ebenfalls wie Variante 1 (deutlich) weniger wie 1 Sekunde.
Warum "genau" braucht Variante 2 so viel Zeit?
Danke
Folgende Situation:
Benutzt wird Microsoft SQL Server 2012.
Eine Tabelle (tab) hat 8 Spalten (sp1, sp2, …, sp8) und ca. 2.000.000 Zeilen.
„sp1“ ist von Typ „INT“.
Variante 1:
Code:
SELECT sp1, sp2, sp3, sp4
FROM tab
WHERE sp1 = 0
Variante 2:
Code:
DECLARE @x INT
SET @x = 0
SELECT sp1, sp2, sp3, sp4
FROM tab
WHERE sp1 = @x
Beide Varianten bringen das gleiche Ergebnis zurück (7 Zeilen).
Variante 1 braucht dafür (deutlich) weniger wie 1 Sekunde.
Variante 2 braucht dafür ca. 20 Sekunden.
Warum genau braucht Variante 2 so viel Zeit?
P.S.: Hier ist ein „dirty workaround“:
Variante 3:
Code:
DECLARE @x INT
SET @x = 0
DECLARE @s NVARCHAR(MAX)
SET @s = '
SELECT sp1, sp2, sp3, sp4
FROM tab
WHERE sp1 = ' + CAST(@x AS NVARCHAR(MAX))
EXEC(@s)
Variante 3 braucht ebenfalls wie Variante 1 (deutlich) weniger wie 1 Sekunde.
Warum "genau" braucht Variante 2 so viel Zeit?
Danke