Fra*_*sis 6 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
Run Code Online (Sandbox Code Playgroud)
它抛出一个错误
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
Run Code Online (Sandbox Code Playgroud)
我在用
select * from TabEmp (index = idx_TabEmp)
Run Code Online (Sandbox Code Playgroud)
它有效,但我不确定这是否是选择索引的正确方法
你能告诉我查询索引的正确方法吗?
索引是优化器"自动获取"的东西 - 理想情况下,您不需要强制选择索引.
如果您确实想强制选择索引,请使用索引提示
SELECT *
FROM TabEmp
WITH (INDEX(idx_TabEmp))
Run Code Online (Sandbox Code Playgroud)
此外,请注意,没有过滤条件(即没有WHERE条款),索引不会出现在图片中,因为您没有搜索特定数据 - 您正在选择所有内容.
提供书籍类比 - 当您阅读完整的书籍封面时 - 您无需查看索引.只有在您搜索特定页面时,才能查看索引并找到所需内容.
这是表提示的语法.
SELECT column_list FROM table_name WITH (INDEX (index_name) [, ...]);
Run Code Online (Sandbox Code Playgroud)
在sql server中,根据你的错误我认为是你的情况.
至于索引是否被拾取(在oracle和sql server中)将取决于许多其他原因.如名称所示,它只是优化器的提示.使用提示和没有提示的查询的成本最终将成为优化器的决定因素.
在大多数情况下,您不会看到需要指定提示.如果使用索引是检索数据的最佳方式,并且所有元数据(统计信息)指示相同,则优化程序使用此访问路径.
| 归档时间: |
|
| 查看次数: |
57969 次 |
| 最近记录: |