在查詢中使用SQL Server TOP
子句時,一旦SQL Server引擎足夠滿足需要返回的TOP X
,SQL Server引擎是否停止搜索行?一旦SQL Server TOP找到足夠的行,它會停止處理嗎?
考慮下面的查詢(假設some_text_field是獨一無二的,沒有設置全文索引):
SELECT
pk_id
FROM
some_table
WHERE
some_text_field = 'some_value';
和
SELECT TOP 1
pk_id
FROM
some_table
WHERE
some_text_field = 'some_value';
第一個查詢將需要搜索整個表並返回它找到的所有結果。我們設置它的方式,該查詢將真正返回一個值。那麼,使用TOP 1
是否會阻止SQL Server在找到匹配項後掃描表的其餘部分?
是的,它在第一次比賽後停止。 – MicSim 2012-03-13 16:59:50
如果您使用'TOP x' **而沒有**提供'ORDER BY',結果將是隨機且不可預測的。因此,由於您應該爲查詢提供一個ORDER BY,所以您需要爲查詢處理器提供適當的索引,以便能夠按順序獲取前n行並在此之後停止 - 否則需要對整個表格進行掃描和排序。 – 2012-03-13 17:01:30
@marc_s您的評論是最佳答案。 :) – 2012-03-13 17:03:59