我知道有很多這些問題,但我找不到與我的問題有關的問題。select top 1 * vs select top 1 1
望着這個問題,Is Changing IF EXIST(SELECT 1 FROM) to IF EXIST(SELECT TOP 1 FROM) has any side effects?
具體指的是在回答本節:
select * from sys.objects
select top 1 * from sys.objects
select 1 where exists(select * from sys.objects)
select 1 where exists(select top 1 * from sys.objects)
我跑我自己的一些測試,以正確地理解它。正如在答覆中指出:
select 1 where exists(select top 1 * from sys.objects)
select 1 where exists(select top 1 1 from sys.objects)
都引起相同的執行計劃,也使得同樣的計劃,
select 1 where exists(select * from sys.objects)
select 1 where exists(select 1 from sys.objects)
從我的研究,像這樣的,「SELECT TOP 1 1」 VS 「IF EXISTS(SELECT 1」問題。我推斷,這是約定最佳實踐:
select 1 where exists(select * from sys.objects)
我的第一個問題是,爲什麼是這個優於此:
select 1 where exists(select 1 from sys.objects)
在試圖理解它,我打破了下來,他們更基本表達式(我使用「頂部1」,以模仿執行計劃外形酷似存在):
select top 1 * from sys.objects
select top 1 1 from sys.objects
我現在看到的是,第一是80%的執行時間(相對於批2),而第二個是20%。難道再沒有更好的做法是使用
select 1 where exists(select 1 from sys.objects)
,因爲它可以適用於這兩種方案,從而減少可能的人爲錯誤?
注:在這裏有一個很好的寫作:http://www.sqlservercentral.com/articles/T-SQL/154149/ – JohnLBevan
是的,我也剛剛閱讀這篇文章,這是一個權威的測試。因爲null在CPU和內存之間使用了一個指針,所以當使用null而不是*或者1來完成時,我很想找時間來測試他的結果。 – Storm