2016-12-06 63 views
0

我有一個複雜的查詢,有許多左外部聯接。Microsoft SQL Server查詢優化基於select distinct選擇count而異優化

如果我採取查詢

select distinct top X [table1].[column1] 
from .... 

與過濾器情侶表,並期待在查詢計劃的顯着不同的比較:

select count(distinct [table1].column1) 
from .... 

我注意到的是所有的左聯接在我的聲明中,where子句或select子句中的篩選器不需要的內容由優化程序爲select distinct頂部刪除,但不適用於select count語句。

我正在使用Microsoft SQL Server 2014作爲我的引擎。

我想知道如何選擇不同刪除連接,並且是一個查詢提示,我可以提供我的選擇計數。

由於顯而易見的原因,select distinct執行得比select count好得多,我希望我的select count也可以執行。

感謝

+0

添加您的SQL查詢 –

+0

獲取執行計劃,將它們發佈到http://pastetheplan.com,然後在此處發佈鏈接。 – alroc

回答

0

如果你有left join秒,但沒有where條款,然後在第一個表中的所有行保留在結果集。他們可能會重複,這取決於使用的連接情況,但不同值的數量是一樣的:

select count(distinct [table1].column1) 
from table1; 

這可以推廣到包括where條款並加入需要的是,我想。

理論上,如果沒有count(),這也是一樣的。 。 。假設所有列都來自第一個表格:

select distinct [table1].column1 
from table1; 

我很驚訝SQL Server完全可以識別這種優化。我想這是一件好事,即使不在其他情況下,它也能識別出它。