如何查找正在使用的索引以及使用索引的查询?

时间:2010-10-06 15:54:03

标签: sql-server tsql sql-server-2008

我正在使用SQL Server 2008.我的表上有重复索引(基本上索引具有相同的定义)。我想知道是否有可能找出哪些查询正在使用这些索引?我不知道为什么首先创建重复索引。因此,在删除它们之前,我想识别正在使用它们的任何查询。

在上面的案例中还有一个问题,SQL Server引擎如何确定使用哪个索引?这会对性能产生什么影响?

由于 ASKI

3 个答案:

答案 0 :(得分:4)

如果数据库中的索引完全重复,请删除它们,句点。删除重复项不会造成任何伤害,但损害可能来自现有的重复项。

SQL Server甚至允许首先创建重复索引的事实是荒谬的。

这是一篇关于如何查找未使用(和缺失)索引的文章: http://weblogs.sqlteam.com/mladenp/archive/2009/04/08/SQL-Server---Find-missing-and-unused-indexes.aspx

答案 1 :(得分:3)

如果索引真的重复,那么它不应该重要使用它们的查询。如果删除一个,查询应该使用另一个(除非有一个指定索引名称的查询提示,这很少见。)

只需确保索引真正重复:

  • 索引字段顺序很重要。 (fname,lname)上的索引与(lname,fname)
  • 上的索引不同
  • 如果你已经有一个on(lname,fname,...其他字段),那么(lname)上的索引就是一个(仅从左边开始,这里的顺序也很重要)
  • 检查包含的字段。类似的索引可能包含不同的包含字段以涵盖不同的查询(尽管您可能仍然可以通过为所有包含的字段创建一个索引来合并它们)
  • 索引的其他属性可能会导致一个索引的行为与另一个索引略有不同(群集?唯一?填充因子?最大并行度?文件组?自动重新计算统计数据?)(您可能不需要2个不同的索引,但值得了解差异,无论如何)

答案 2 :(得分:2)

使用DMV(动态管理视图),您可以确定地找出未使用的索引 - 可以删除那些长时间未使用的索引。

退房:

  

在上述案例中还有一个问题,   SQL Server引擎如何确定   使用哪个索引?

这是一个非常复杂的过程 - SQL Server查询优化器将使用统计信息和其他方法来确定哪些索引对给定查询有用。当你有两个相同的时候,它会选择哪一个,这是一个棘手的问题......我不知道,说实话。

  

这会对性能产生什么影响?

是否有重复相同的指数?那些需要在触及索引中的列的任何INSERT,UPDATE和DELETE操作上进行维护 - 所以你肯定会为此付出性能损失。