ORDER BY
İçinde fıkra SELECT
açıklamada gereksiz olduğunu.
Gereksizdir, çünkü eklenecek satırlar, sıralanmaları gerekiyorsa , yine de sıralanırlar.
Bir test davası oluşturalım.
CREATE TABLE #Test (
id INTEGER NOT NULL
);
CREATE UNIQUE CLUSTERED INDEX CL_Test_ID ON #Test (id);
CREATE TABLE #Sequence (
number INTEGER NOT NULL
);
INSERT INTO #Sequence
SELECT number FROM master..spt_values WHERE name IS NULL;
Gerçek sorgu planlarının metin gösterimini etkinleştirelim, böylece sorgu işlemcisi tarafından hangi görevlerin gerçekleştirildiğini görebiliriz.
SET STATISTICS PROFILE ON;
GO
Şimdi, INSERT
2K ORDER BY
yan tümce tümce tümce tümce olmadan olsun .
INSERT INTO #Test
SELECT number
FROM #Sequence
Bu sorgu için gerçek yürütme planı şudur.
INSERT INTO #Test SELECT number FROM #Sequence
|--Clustered Index Insert(OBJECT:([tempdb].[dbo].[#Test]), SET:([tempdb].[dbo].[#Test].[id] = [tempdb].[dbo].[#Sequence].[number]))
|--Top(ROWCOUNT est 0)
|--Sort(ORDER BY:([tempdb].[dbo].[#Sequence].[number] ASC))
|--Table Scan(OBJECT:([tempdb].[dbo].[#Sequence]))
Gördüğünüz gibi, asıl INSERT gerçekleşmeden önce bir Sıralama işleci var.
Şimdi, tabloyu temizleyelim ve INSERT
2k cümlesiyle birlikte tabloya satırları ORDER BY
sokalım.
TRUNCATE TABLE #Test;
GO
INSERT INTO #Test
SELECT number
FROM #Sequence
ORDER BY number
Bu sorgu için gerçek yürütme planı şudur.
INSERT INTO #Test SELECT number FROM #Sequence ORDER BY number
|--Clustered Index Insert(OBJECT:([tempdb].[dbo].[#Test]), SET:([tempdb].[dbo].[#Test].[id] = [tempdb].[dbo].[#Sequence].[number]))
|--Top(ROWCOUNT est 0)
|--Sort(ORDER BY:([tempdb].[dbo].[#Sequence].[number] ASC))
|--Table Scan(OBJECT:([tempdb].[dbo].[#Sequence]))
Bu INSERT
cümle olmadan ifade için kullanılan aynı uygulama planı olduğuna dikkat edin ORDER BY
.
Şimdi, Mark Smith başka bir cevapta gösterdiği için Sort
işlem her zaman gerekli değildir (eğer eklenecek satır sayısı düşükse), ancak bu durumda fıkra hala gereksizdir, çünkü açık bir şekilde bile , hiçbir işlem yapılmaz. sorgu işlemcisi tarafından.ORDER BY
ORDER BY
Sort
INSERT
Minimal olarak günlüğe kaydedilen kullanarak, bir ifadeyi kümelenmiş bir dizini içeren bir tabloya göre optimize edebilirsiniz INSERT
, ancak bu sorunun kapsamı dışındadır.
Updated 2011-11-02: Mark Smith'in gösterdiği gibi , INSERT
kümelenmiş bir dizine sahip bir tabloya her zaman sıralanması gerekmeyebilir - ORDER BY
fıkra da bu durumda gereksizdir.