在計(jì)劃指南中使用 INDEX 和 FORCESEEK 查詢提示_第1頁
在計(jì)劃指南中使用 INDEX 和 FORCESEEK 查詢提示_第2頁
在計(jì)劃指南中使用 INDEX 和 FORCESEEK 查詢提示_第3頁
在計(jì)劃指南中使用 INDEX 和 FORCESEEK 查詢提示_第4頁
在計(jì)劃指南中使用 INDEX 和 FORCESEEK 查詢提示_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、您可以將 INDEX 和 FORCESEEK 表提示指定為查詢提示。如果將 這些提示指定為查詢提示,則它們與內(nèi)聯(lián)表或視圖提示的行為方式相同INDEX 提示強(qiáng)制查詢優(yōu)化器在查詢中僅使用指定的索引來訪問被引用 表或視圖中的數(shù)據(jù)。FORCESEEK提示強(qiáng)制優(yōu)化器僅使用索引查找操 作來訪問被引用表或視圖中的數(shù)據(jù)??梢栽谟?jì)劃指南的 OPTION 子句 中使用這些提示,以影響查詢的優(yōu)化程度。當(dāng)查詢與計(jì)劃指南匹配時(shí), 在查詢進(jìn)行編譯和優(yōu)化之前,計(jì)劃指南中指定的 OPTION 子句將添加 到查詢中。有關(guān)計(jì)劃指南的詳細(xì)信息,請(qǐng)參閱了解計(jì)劃指南。-注意:計(jì)劃指南錯(cuò)用查詢提示會(huì)導(dǎo)致出現(xiàn)編譯、執(zhí)行或性能問題。計(jì)劃指南

2、應(yīng) 僅由經(jīng)驗(yàn)豐富的開發(fā)人員和數(shù)據(jù)庫管理員使用。如果將 INDEX 和 FORCESEEK 表提示指定為查詢提示,則它們對(duì) 以下對(duì)象有效:表視圖索引視圖公用表表達(dá)式(提示必須在其結(jié)果集填充公用表表達(dá)式的 SELECT 語句中指定。)動(dòng)態(tài)管理視圖命名子查詢不能為表值函數(shù)、表變量或 OPENROWSET 語句指定表提示。若要為索引視圖指定一個(gè)索引提示,還必須在 OPTION 子句中指定NOEXPAND 提示,否則將忽略該索引提示。有關(guān)詳細(xì)信息,請(qǐng)參閱解析視圖的索引。有關(guān)用于將 INDEX 和 FORCESEEK 提示指定為查詢提示的語法的信息,請(qǐng)參閱查詢提示 (Transact-SQL)。_最佳實(shí)踐

3、以下為建議的最佳實(shí)踐:在測試計(jì)劃指南語句時(shí),僅在計(jì)劃指南的上下文中或即席查詢中將INDEX 和 FORCESEEK 提示用作查詢提示。對(duì)于所有其他即席查 詢,請(qǐng)將這些提示指定為表提示。在使用 FORCESEEK 提示之前,請(qǐng)確保有關(guān)數(shù)據(jù)庫的統(tǒng)計(jì)信息是最 新的,且準(zhǔn)確無誤。利用最新的統(tǒng)計(jì)信息,優(yōu)化器能準(zhǔn)確地估算不同查詢計(jì)劃的開銷,從 而能選擇高質(zhì)量的計(jì)劃。因此,建議對(duì)于每個(gè)用戶數(shù)據(jù)庫,都將 AUTO_CREATE_STATISTICS 和AUTO_UPDATE_STATISTICS 設(shè)置為 ON (默認(rèn)值)。或者,您可以使用 UPDATE STATISTICS 語句手動(dòng)更新表或視圖的統(tǒng)計(jì)信除非在

4、必要情況下,否則請(qǐng)不要將INDEX提示與FORCESEEK 一起使用。也就是說,如果單獨(dú)使用 FORCESEEK 就可生成滿足需 要的計(jì)劃,則同時(shí)使用 INDEX 提示會(huì)過分限制優(yōu)化器可做的選擇。 而且,在更改表的物理架構(gòu)以刪除提示中指定的索引時(shí), INDEX 提 示將導(dǎo)致查詢失敗。相比之下,只要應(yīng)用 FORCESEEK 提示的表中 至少存在一個(gè)可使用的索引,則即使在您更改索引結(jié)構(gòu)時(shí)查詢?nèi)阅芫?譯。請(qǐng)不要將 INDEX 提示 INDEX (0) 與 FORCESEEK 提示一起使 用。INDEX (0)強(qiáng)制對(duì)基表進(jìn)行掃描。當(dāng)與FORCESEEK同時(shí)使 用時(shí),將找不到計(jì)劃,并返回錯(cuò)誤 8622。

5、請(qǐng)不要將 USE PLAN 查詢提示與 FORCESEEK 提示一起使用。否 則,將忽略 FORCESEEK 提示。一將INDEX和FORCESEEK提示與其他表提示一起使用可以為沒有任何現(xiàn)有表提示的查詢指定 INDEX 和 FORCESEEK 提示,這些提示也可用于替換查詢中一個(gè)或多個(gè)現(xiàn)有 INDEX 和 FORCESEEK 提示。如果與計(jì)劃指南匹配的查詢已經(jīng)含有一個(gè)指定上 述表提示的WITH子句,則在計(jì)劃指南的hints參數(shù)中指定的查詢 提示會(huì)替換查詢中的這些提示。例如,如果查詢包含HumanResources.Employee 表的表提示 WITH INDEX(PK_Employee_B

6、usinessEntityID),而計(jì)戈【J指南中的hints 參數(shù)指定 OPTION(TABLEHINT(HumanResources.Employee, INDEX( AK_Employee_LoginID ) ,則查詢優(yōu)化器將使用K_Employee_LoginID 索引。不允許非 INDEX 和 FORCESEEK 的表提示用作計(jì)戈指南中的查詢 提示,除非該查詢已經(jīng)具有一個(gè)指定表提示的 WITH 子句。這種情況 下,還必須使用 OPTION 子句中的 TABLE HINT 來將匹配的提示指 定為查詢提示,以保留查詢的語義。例如,如果查詢包含表提示NOLOCK,則計(jì)劃指南的hints參數(shù)

7、中的OPTIONS子句除了包含OPTIONS 子句中的任意 INDEX 或 FORCESEEK 表提示外,還必 須包含NOLOCK提示。請(qǐng)參閱本主題后面的示例C。當(dāng)通過使用 OPTION 子句中的 TABLE HINT 指定了非 INDEX 或 FORCESEEK 的表提示,而未指定匹配的查詢提示時(shí),或指定了后者 而未指定前者,則會(huì)引發(fā)錯(cuò)誤 8702,表示 OPTION 子句會(huì)導(dǎo)致查詢 的語義發(fā)生變化,該查詢將失敗。一將INDEX和FORCESEEK提示與其他 査詢提示一起使用如果與計(jì)戈指南匹配的查詢已經(jīng)含有一個(gè)指定查詢提示的 OPTION 子句,則在計(jì)劃指南的hints參數(shù)中指定的查詢提示會(huì)

8、替換查詢中的這些提示。但是,若要使計(jì)劃指南與已含有 OPTION 子句的查詢匹配, 則您在 sp_create_plan_guide (Transact-SQL) 語句中指定要匹 配的查詢的文本時(shí),必須包含該查詢的 OPTION 子句。若要將計(jì)劃指 南中指定的提示添加到查詢中已存在的提示,而不是替換已存在的提示 則必須在計(jì)劃指南的 OPTION 子句中同時(shí)指定原始提示和附加提示。A. 使用 FORCESEEK下例在計(jì)劃指南的hints參數(shù)中使用FORCESEEK提示。此選項(xiàng)強(qiáng) 制優(yōu)化器使用索引查找操作來訪問HumanResources .Employee表 中的數(shù)據(jù)。請(qǐng)注意,這可能會(huì)導(dǎo)致優(yōu)化器

9、使用一個(gè)并非在表提示中指定 的索引。復(fù)制代碼USE AdventureWorks2008R2;GOEXEC sp_create_plan_guide name = NGuide3,stmt = NSELECT c.LastName, c.FirstName, HumanResources.Employee.JobTitleFROM HumanResources.EmployeeJOIN Person.Person AS c ONHumanResources.Employee.BusinessEntityID = c.BusinessEntityIDWHEREHumanResources.Emp

10、loyee.OrganizationLevel = 3ORDER BY c.LastName, c.FirstName;, type = NSQL,module_or_batch = NULL,params = NULL,hints = NOPTION (TABLEHINT( HumanResources.Employee, FORCESEEK);GOB. 使用多個(gè)表提示下例將 INDEX 提示應(yīng)用到一個(gè)表,將 FORCESEEK 提示應(yīng)用到另 一個(gè)表。復(fù)制代碼USE AdventureWorks2008R2;GOEXEC sp_create_plan_guidename = NGuide4,

11、stmt = NSELECT c.LastName, c.FirstName, e.JobTitleFROM HumanResources.Employee AS eJOIN Person.Person AS c ONe.BusinessEntitylD = c.BusinessEntityIDWHERE OrganizationLevel = 3;,type = NSQL, module_or_batch = NULL,params = NULL,hints = NOPTION (TABLE HINT ( e,INDEX( IX Employee OrganizationLevel Orga

12、nizationNo de ),TABLE HINT ( c, FORCESEEK);GOC. 指定影響語義的提示下例在查詢中包含兩個(gè)表提示:NOLOCK和INDEX,前者為影響語義的提示,后者為不影響語義的提示。若要保留查詢的語義,應(yīng)在計(jì)劃 指南的 OPTIONS 子句中指定 NOLOCK 提示。除 NOLOCK 提示外 還指定了 INDEX 和 FORCESEEK 提示,它們?cè)诰幾g和優(yōu)化語句時(shí) 將替換查詢中不影響語義的 INDEX 提示。復(fù)制代碼USE AdventureWorks2008R2;GOEXEC sp_create_plan_guidename = NGuide6,stmt =

13、 NSELECT c.LastName, c.FirstName,e.JobTitleFROM HumanResources.Employee AS eJOIN Person.Person AS c ONe.BusinessEntitylD = c.BusinessEntitylDWHERE OrganizationLevel = 3;,type = NSQL,module_or_batch = NULL,params = NULL,hints = NOPTION (TABLE HINT ( e,INDEX( IX_Employee_OrganizationLevel_Organization

14、Node) , NOLOCK, FORCESEEK );GO下例顯示了另一種保留查詢語義并使優(yōu)化器能夠選擇并非在表提示中 指定的索引的方法。此方法是這樣實(shí)現(xiàn)的:在 OPTIONS 子句中指定 NOLOCK 提示(因?yàn)樗怯绊懻Z義的),并指定只帶有一個(gè)表引用、 不帶 INDEX 提示的 TABLE HINT 關(guān)鍵字。復(fù)制代碼USE AdventureWorks2008R2;GOEXEC sp_create_plan_guidename = NGuide7,stmt = NSELECT c.LastName, c.FirstName, e.JobTitleFROM HumanResources.E

15、mployee AS eJOIN Person.Person AS c ON e.BusinessEntityID = c.BusinessEntityIDWHERE OrganizationLevel = 2;,type = NSQL,module_or_batch = NULL,params = NULL,hints = NOPTION (TABLE HINT ( e, NOLOCK);D. 使用 TABLE HINT 覆蓋現(xiàn)有的表提示下例顯示如何在不指定 INDEX 提示的情況下使用 TABLE HINT 覆 蓋在查詢的 FROM 子句中指定的 INDEX 表提示的行為。此方法使優(yōu) 化器能選擇并非在表提示中指定的索引。復(fù)制代碼USE AdventureWorks2008R2;GOEXEC sp_create_plan_guidename = NGuide5,stmt = NSELECT c.LastName, c.FirstName,e.JobTitleFROM HumanResources.Emp

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論