如何选择sql索引

时间:2010-12-03 15:39:14

标签: sql sql-server sql-server-2005

如何选择sql索引

我有一个表格TabEmp,其中包含字段c_ID (primary key)c_Emp_ID

我使用字段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)

它有效,但我不确定这是否是选择索引的正确方法

您能告诉我查询索引的正确方法吗?

2 个答案:

答案 0 :(得分:8)

索引是优化器“自动获取”的东西 - 理想情况下,您不需要强制选择索引。

如果您真的想强制选择索引,请使用索引提示

SELECT *
FROM TabEmp
WITH (INDEX(idx_TabEmp))

另外,请注意,如果没有过滤条件(即没有WHERE子句),索引不会出现在图片中,因为您没有搜索特定数据 - 您正在选择所有内容。

提供书籍类比 - 当您阅读完整的书籍封面时 - 您无需查看索引。只有在您搜索特定页面时,才能查看索引并找到所需内容。

答案 1 :(得分:8)

这是表提示的语法。

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

在sql server中我认为是基于你的错误。

关于索引是否被拾取(在oracle和sql server中)将取决于许多其他原因。如名称所示,它只是优化器的提示。使用提示和没有提示的查询的成本最终将成为优化器的决定因素。

在大多数情况下,您不会看到需要指定提示。如果使用索引是检索数据和所有元数据的最佳方法,优化程序会使用此访问路径(统计数据)表示相同。