我正在使用SQL Server 2008.我的表上有重复索引(基本上索引具有相同的定义)。我想知道是否有可能找出哪些查询正在使用这些索引?我不知道为什么首先创建重复索引。因此,在删除它们之前,我想识别正在使用它们的任何查询。
在上面的案例中还有一个问题,SQL Server引擎如何确定使用哪个索引?这会对性能产生什么影响?
由于 ASKI
答案 0 :(得分:4)
如果数据库中的索引完全重复,请删除它们,句点。删除重复项不会造成任何伤害,但损害可能来自现有的重复项。
SQL Server甚至允许首先创建重复索引的事实是荒谬的。
这是一篇关于如何查找未使用(和缺失)索引的文章: http://weblogs.sqlteam.com/mladenp/archive/2009/04/08/SQL-Server---Find-missing-and-unused-indexes.aspx
答案 1 :(得分:3)
如果索引真的重复,那么它不应该重要使用它们的查询。如果删除一个,查询应该使用另一个(除非有一个指定索引名称的查询提示,这很少见。)
只需确保索引真正重复:
答案 2 :(得分:2)
使用DMV(动态管理视图),您可以确定地找出未使用的索引 - 可以删除那些长时间未使用的索引。
退房:
在上述案例中还有一个问题, SQL Server引擎如何确定 使用哪个索引?
这是一个非常复杂的过程 - SQL Server查询优化器将使用统计信息和其他方法来确定哪些索引对给定查询有用。当你有两个相同的时候,它会选择哪一个,这是一个棘手的问题......我不知道,说实话。
这会对性能产生什么影响?
是否有重复相同的指数?那些需要在触及索引中的列的任何INSERT,UPDATE和DELETE操作上进行维护 - 所以你肯定会为此付出性能损失。