SQL 关于索引的问题。如何调用我创建的索引
SQL question on indexes. How to call the index that I have created
如何在 SQL 中调用为 table 创建的索引?
例如我创建了一个索引:
CREATE INDEX idx_pname ON Persons (LastName, FirstName);
如何调用?
索引是后台数据结构,不能直接调用。如果查询发现索引是以最佳方式获取数据的好方法,它们将在内部用于获取数据。
如果你想强制查询优化器利用索引,你可以使用索引提示。下面是一个例子。
SELECT FirstName,LastName FROM Persons WITH (INDEX = idx_pname )
但是,我总是建议不要使用索引提示,因为它会带来很多问题。
- 当统计数据也发生变化时,强制索引会导致性能问题
- 如果删除索引,查询将不起作用
但是,如果您想查看 table 上有哪些索引,您可以使用 sp_help
查看 table 信息。
EXEC sp_help 'dbo.Persons'
此外,您可以使用 sp_helpindex
EXEC sp_helpindex 'dbo.Persons'
感谢您的回答。我已经明白了。所以,基本上数据库会使用索引,如果它们需要调用的话。这对于查询搜索优化很有用。如果我们觉得这个被调用的多,或者会用的多,我们就简单的建立一个索引。
在属于数据库 table 的字段上定义的索引是数据库架构的一部分,并且定义索引的目的是在查找索引字段时加快从数据库 table 中进行数据检索操作的性能根据索引定义进入特定的排序顺序,并加快过程,因为一旦找到匹配的记录,搜索就会停止。因此,作为查询执行计划的一部分,根据 select 查询定义应用索引。
判断是否使用索引进入select操作使用解释语句
EXPLAIN SELECT statement
如何在 SQL 中调用为 table 创建的索引?
例如我创建了一个索引:
CREATE INDEX idx_pname ON Persons (LastName, FirstName);
如何调用?
索引是后台数据结构,不能直接调用。如果查询发现索引是以最佳方式获取数据的好方法,它们将在内部用于获取数据。
如果你想强制查询优化器利用索引,你可以使用索引提示。下面是一个例子。
SELECT FirstName,LastName FROM Persons WITH (INDEX = idx_pname )
但是,我总是建议不要使用索引提示,因为它会带来很多问题。
- 当统计数据也发生变化时,强制索引会导致性能问题
- 如果删除索引,查询将不起作用
但是,如果您想查看 table 上有哪些索引,您可以使用 sp_help
查看 table 信息。
EXEC sp_help 'dbo.Persons'
此外,您可以使用 sp_helpindex
EXEC sp_helpindex 'dbo.Persons'
感谢您的回答。我已经明白了。所以,基本上数据库会使用索引,如果它们需要调用的话。这对于查询搜索优化很有用。如果我们觉得这个被调用的多,或者会用的多,我们就简单的建立一个索引。
在属于数据库 table 的字段上定义的索引是数据库架构的一部分,并且定义索引的目的是在查找索引字段时加快从数据库 table 中进行数据检索操作的性能根据索引定义进入特定的排序顺序,并加快过程,因为一旦找到匹配的记录,搜索就会停止。因此,作为查询执行计划的一部分,根据 select 查询定义应用索引。
判断是否使用索引进入select操作使用解释语句
EXPLAIN SELECT statement