如何选择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)
它有效,但我不确定这是否是选择索引的正确方法
您能告诉我查询索引的正确方法吗?
答案 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中)将取决于许多其他原因。如名称所示,它只是优化器的提示。使用提示和没有提示的查询的成本最终将成为优化器的决定因素。
在大多数情况下,您不会看到需要指定提示。如果使用索引是检索数据和所有元数据的最佳方法,优化程序会使用此访问路径(统计数据)表示相同。