簡體   English   中英

查詢執行計划-何時執行Where子句?

[英]Query Execution Plan - When is the Where clause executed?

我有一個這樣的查詢(由LINQ創建):

SELECT [t0].[Id], [t0].[CreationDate], [t0].[CreatorId]
FROM [dbo].[DataFTS]('test', 100) AS [t0]
WHERE [t0].[CreatorId] = 1
ORDER BY [t0].[RANK]

DataFTS是全文檢索表值函數。 查詢執行計划如下所示:

SELECT (0%) - Sort (23%) - Nested Loops (Inner Join) (1%) - Sort (Top N Sort) (25%) - Stream Aggregate (0%) - Stream Aggregate (0%) - Compute Scalar (0%) - Table Valued Function (FullTextMatch) (13%)
                                                          |
                                                          |
                                                          - Clustered Index Seek (38%)

這是否意味着WHERE子句([的CreatorID] = 1)設置在TVF(全文搜索) 之前或在全文本搜索之后執行? TVF是在查看縮小的數據集(由WHERE子句縮小)還是在整個表中?

TVF如下所示:

FUNCTION [dbo].[DataFTS] (@searchtext nvarchar(4000), @limitcount int)
RETURNS TABLE
AS
RETURN  
SELECT * FROM Databook
INNER JOIN CONTAINSTABLE(Databook, *, @searchtext, @limitcount) 
AS KEY_TBL ON Databook.Id = KEY_TBL.[KEY]

謝謝。

我懷疑WHERE是“嵌套循環(內部聯接)”的一部分

TVF是內聯還是多語句? 如果內聯,我會更早地期待它,但是它看起來是多語句的(這是一個黑匣子),因此稍后會使用過濾器進行流和排序運算符。

編輯:

通過定義,我看到在TOP(@limitcount)之后應用了WHERE。 確切地說,WHERE應用於表的其他位置(可能是聚集索引查找),並且tvf結果由JOIN過濾(請參見上文)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM