说我有表A。如何查找列A的索引。 那么在SELECT语句查询中引用该索引的语法是什么?
谢谢
答案 0 :(得分:0)
SELECT
语句不引用索引(除非您显式给出优化提示,这是不寻常的)。也就是说,索引是隐藏的,只是数据库的一部分。当优化器计算出最佳查询计划将使用索引时,它就由优化器使用。
所以,这就是“设置并忘记它”。
您可以使用系统表/视图来查找可用的索引。我建议从INFORMATION_SCHEMA.INDEXES
开始。
答案 1 :(得分:0)
您可以在系统表sys.indexes,sys.index_columns和sys.columns中找到信息。 如果要在使用A列的表A上查找特定索引,可以在下面的查询中使用
select distinct i.name, STUFF((SELECT ', ' + col.name
FROM sys.indexes ind_col
INNER JOIN sys.index_columns ind_col_detail
ON ind_col.object_id = ind_col_detail.object_id
AND ind_col.index_id = ind_col_detail.index_id
INNER JOIN sys.columns col
ON i.object_id = col.object_id
AND ind_col_detail.column_id = col.column_id
WHERE i.object_id = ind_col.object_id
AND i.index_id = ind_col.index_id
AND ind_col_detail.is_included_column = 0
ORDER BY ind_col_detail.key_ordinal
FOR XML PATH('')), 1, 2, '') AS key_column_list ,
STUFF((SELECT ', ' + col.name
FROM sys.indexes ind_col
INNER JOIN sys.index_columns ind_col_detail
ON ind_col.object_id = ind_col_detail.object_id
AND ind_col.index_id = ind_col_detail.index_id
INNER JOIN sys.columns col
ON i.object_id = col.object_id
AND ind_col_detail.column_id = col.column_id
WHERE i.object_id = ind_col.object_id
AND i.index_id = ind_col.index_id
AND ind_col_detail.is_included_column = 1
ORDER BY ind_col_detail.key_ordinal
FOR XML PATH('')), 1, 2, '') AS included_column_list
from sys.indexes i
inner join sys.index_columns ic
on i.index_id = ic.index_id
and i.object_id = ic.object_id
and OBJECT_NAME(i.object_id) = 'Table A'
inner join sys.columns c
on c.column_id = ic.column_id
and c.object_id = i.object_id
and c.name = 'Column A'
即使列A包含在列中,查询也会返回索引。有关包含的列的更多详细信息,是here
通常,SQL Server优化器会为您的查询计算最佳计划,并确定执行查询时是否使用索引。
但是有一个选项可以强制SQL Server优化器使用表提示INDEX使用特定索引。
有关表提示的Microsoft文档为here
Pinal Dave如何使用提示的示例是here