使 Microsoft® SQL Server™ 不執(zhí)行 Transact-SQL 語(yǔ)句。相反,SQL Server 返回有關(guān)如何執(zhí)行語(yǔ)句的詳細(xì)信息。
SET SHOWPLAN_TEXT { ON | OFF }
SET SHOWPLAN_TEXT 的設(shè)置是在執(zhí)行或運(yùn)行時(shí)設(shè)置,而不是在分析時(shí)設(shè)置。
當(dāng) SET SHOWPLAN_TEXT 為 ON 時(shí),SQL Server 返回各個(gè) Transact-SQL 語(yǔ)句的執(zhí)行信息但不執(zhí)行語(yǔ)句。將該選項(xiàng)設(shè)置為 ON 后,將返回有關(guān)所有后續(xù) Transact-SQL 語(yǔ)句的信息,直到將該選項(xiàng)設(shè)置為 OFF 為止。例如,如果在 SET SHOWPLAN_TEXT 為 ON 時(shí)執(zhí)行 CREATE TABLE 語(yǔ)句,SQL Server 將從涉及同一個(gè)表的后續(xù) SELECT 語(yǔ)句返回錯(cuò)誤信息;指定的表不存在。因此,對(duì)該表的后續(xù)引用將失敗。當(dāng) SET SHOWPLAN_TEXT 為 OFF 時(shí),SQL Server 執(zhí)行語(yǔ)句但不生成報(bào)表。
SET SHOWPLAN_TEXT 用于返回可由 Microsoft MS-DOS® 應(yīng)用程序(如 osql 實(shí)用工具)讀取的輸出。SET SHOWPLAN_ALL 返回更詳細(xì)的輸出供處理輸出的程序使用。
在存儲(chǔ)過(guò)程內(nèi)不能指定 SET SHOWPLAN_TEXT 和 SET SHOWPLAN_ALL,它們必須是批處理中的語(yǔ)句。
SET SHOWPLAN_TEXT 將信息作為行集返回,行集形成一個(gè)層次結(jié)構(gòu)樹(shù),用以表示 SQL Server 查詢處理器在執(zhí)行各語(yǔ)句時(shí)所采取的步驟。輸出中反映的每個(gè)語(yǔ)句都包含一個(gè)含有語(yǔ)句文本的行,后面跟有幾個(gè)含有執(zhí)行步驟詳細(xì)信息的行。下表顯示輸出中包含的列。
列名 | 描述 |
---|---|
StmtText | 對(duì)于不是 PLAN_ROW 類型的行,該列包含 Transact-SQL 語(yǔ)句的文本。對(duì)于 PLAN_ROW 類型的行,該列包含對(duì)操作的描述。該列包含物理運(yùn)算符,也可以選擇包含邏輯運(yùn)算符。該列的后面還可以跟有由物理運(yùn)算符決定的描述。有關(guān)物理運(yùn)算符的更多信息,請(qǐng)參見(jiàn) SET SHOWPLAN_ALL 中的 Argument 列。 |
有關(guān)可以在顯示計(jì)劃輸出中看到的物理和邏輯運(yùn)算符的更多信息,請(qǐng)參見(jiàn)邏輯運(yùn)算符和物理運(yùn)算符。
SET SHOWPLAN_TEXT 權(quán)限默認(rèn)授予所有用戶。
下例顯示 SQL Server 在處理語(yǔ)句時(shí)如何使用索引。
下面是使用索引的查詢:
SET SHOWPLAN_TEXT ON
GO
USE pubs
SELECT *
FROM roysched
WHERE title_id = 'PS1372'
GO
SET SHOWPLAN_TEXT OFF
GO
下面是結(jié)果集:
StmtText
------------------------------------------------------
USE pubs
SELECT *
FROM roysched
WHERE title_id = 'PS1372'
(2 row(s) affected)
StmtText
------------------------------------------------------------------------
|--Bookmark Lookup(BOOKMARK:([Bmk1000]), OBJECT:([pubs].[dbo].[roysched]))
|--Index Seek(OBJECT:([pubs].[dbo].[roysched].[titleidind]), SEEK:([roysched].[title_id]='PS1372') ORDERED)
(2 row(s) affected)
下面是不使用索引的查詢:
SET SHOWPLAN_TEXT ON
GO
USE pubs
SELECT *
FROM roysched
WHERE lorange < 5000
GO
SET SHOWPLAN_TEXT OFF
GO
下面是結(jié)果集:
StmtText
-------------------------------------------------
USE pubs
SELECT *
FROM roysched
WHERE lorange < 5000
(2 row(s) affected)
StmtText
------------------------------------------------------------------------
|--Table Scan(OBJECT:([pubs].[dbo].[roysched]), WHERE:([roysched].[lorange]<5000))
(1 row(s) affected)
相關(guān)文章