2010-12-03 73 views
6

如何選擇SQL指數如何選擇SQL指數

我有一個領域c_ID (primary key),並c_Emp_ID的表TabEmp。

我創建的索引上idx_TabEmp (non-clustered)與領域c_ID (primary key)c_Emp_ID

我使用select語句

select * from index = idx_TabEmp 

它拋出一個錯誤

Incorrect syntax near 'index'. If this is intended as a part of a table hint, A WITH keyword and parenthesis are now required. See SQL Server Books Online for proper syntax 

我使用

select * from TabEmp (index = idx_TabEmp) 

它的工作原理,但我不確定這是否是選擇索引的正確方法

您能否告訴我查詢索引的正確方法?

+3

優化程序應該自動使用索引,如果它將有利於查詢。查看執行計劃以確定正在使用的索引。 – 2010-12-03 15:43:22

+1

在SQL Server中,您不需要/通常不指定要使用的索引--SQL Server的查詢優化器會自動計算出來。只要做你的'SELECT(列表)FROM(tablename)`,並且如果索引有幫助,SQL Server就會使用它' – 2010-12-03 15:53:15

回答

8

這是一個表提示的語法。

SELECT column_list FROM table_name WITH (INDEX (index_name) [, ...]); 

在sql服務器,我認爲你的情況基於你的錯誤。

至於索引是否將有所回升與否(無論是在Oracle和SQL Server)將取決於很多其他的原因。正如名稱所示,優化器只是提示。使用提示並且沒有提示的查詢的成本最終將成爲優化器的決定因素。

在大多數情況下,你會看不到需要指定提示。如果使用索引是檢索數據的最佳方法,並且所有元數據(統計數據)都指示相同,則優化程序使用此訪問路徑。

8

該指數是一些東西,優化拿起「自動的 - 最好你並不需要強制選擇索引

如果你真的想強制選擇索引,使用索引提示

SELECT * 
FROM TabEmp 
WITH (INDEX(idx_TabEmp)) 

另外請注意,沒有過濾條件(即無WHERE條款),該指數不進入畫面,因爲你不是尋找一個特定的數據 - 你選擇的一切

爲了提供這本書的比喻 - 當你閱讀一本完整的書籍封面時,你不需要看索引。只有當您搜索特定頁面時,纔會查看索引並找到您想要的內容。

+0

I AM USING SQL 2005。 – Fransis 2010-12-03 15:46:37