2010-12-03 32 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