SQL索引-这是重叠的吗?

SQL索引-这是重叠的吗?,sql,sql-server,indexing,Sql,Sql Server,Indexing,我将检查并删除SQL数据库中的重复索引和冗余索引 所以如果我有两个相同的索引,我会删除 如果我有重叠的索引,我会删除,例如 指标1:品牌、型号 指数2:品牌、型号、价格 我删除索引1 如果索引的顺序相同,但有额外的字段呢 指标1:品牌、型号 指标2:品牌、价格、型号 我是否可以安全地删除索引1 我的猜测是否定的,但我不确定好吧,当然你可以放弃它;你似乎有权限。然而,这些指数并不相等 例如,第一个将优化此查询: where brand = @brand and model = @model

我将检查并删除SQL数据库中的重复索引和冗余索引

所以如果我有两个相同的索引,我会删除

如果我有重叠的索引,我会删除,例如

  • 指标1:品牌、型号
  • 指数2:品牌、型号、价格
我删除索引1

如果索引的顺序相同,但有额外的字段呢

  • 指标1:品牌、型号
  • 指标2:品牌、价格、型号
我是否可以安全地删除索引1

我的猜测是否定的,但我不确定

好吧,当然你可以放弃它;你似乎有权限。然而,这些指数并不相等

例如,第一个将优化此查询:

where brand = @brand and model = @model
第二个将能够使用索引,但不是最佳的,因为它不能直接搜索到正确的行。引擎需要扫描索引中的所有
@brand
记录,以找到匹配的车型。因为这可以在索引本身中完成,所以应该有相当好的性能

这对查询是否重要取决于查询的性质,但索引不是冗余的


顺便说一句,我认为MySQL在解释如何使用复合索引方面做得相当好(不同的数据库在索引使用方面并不完全相同,但它们非常相似)。

不,删除它是不安全的。列的顺序和位置很重要

在其他两列(
品牌
型号
)之间引入
价格
列是问题所在。如果没有
(品牌、型号)
上的索引,则
型号
值在
品牌
下是“有序”的。在
model
之前添加
price
列后,
model
值不再“有序”

例如,执行此操作的查询:

WHERE brand = 'foo'
  AND model >= 'bar' AND model <= 'cat'
WHERE brand='foo'
模型>='bar'和模型打败了我(正如我半预期的那样)。投了赞成票,解释得很好。