sql - 多重索引个性:边界重复键
问题描述
我正在从 Brent Ozar 运行 sp_BlitzIndex,并获得了许多这些项目。
Multiple Index Personalities: Borderline duplicate keys
我不是 100% 知道该怎么做,但下面是一个例子。
CREATE INDEX [IX_Test] ON [Test] ( [SportId] ) WITH (FILLFACTOR=100, ONLINE=?, SORT_IN_TEMPDB=?, DATA_COMPRESSION=?);
CREATE UNIQUE INDEX [IX_Test_2] ON [Test] ( [SportId], [AnotherId] ) WITH (FILLFACTOR=100, ONLINE=?, SORT_IN_TEMPDB=?, DATA_COMPRESSION=?);
如您所见,它们看起来很相似。我的问题是删除第一个索引 SportID 但保留双索引(SportId,TextId)是否会造成伤害。
我在这里最好的方法是什么?
解决方案
第一个索引 IX_Test 是多余的,因为它的第一个最具选择性的列由索引 IX_Test_2 复制。
这两个索引都可以满足对 SportId 的键或范围对特定行的查找,第二个索引还包括一个附加列,因此涵盖了需要两者或按 AnotherId 排序的查询。
在没有第一个索引的情况下,优化器可以同样好地利用第二个索引,并且添加单个 int 列虽然使索引稍宽,但可以忽略不计,并且可以通过减少维护两者的开销来抵消。
推荐阅读
- angular - RouterLink在第一次点击后不更新目标组件
- python - 使列表中每个 DataFrame 的每一列成为一个大列表中的自己的列表
- javascript - 如何访问对象内部数组中的值
- vue.js - 如何从 Vue.js 中另一个组件的方法渲染组件
- jquery - 如何使用 jquery 循环遍历多个分支 json 数组而不将结果限制为单个数组?
- c++ - 单链表被核心转储的 Hackerearth 练习问题的代码
- sqlite - 如何使用 Archives 扩展安装 SQLite?
- android - Recyclerview溢出ConstraintLayout
- java - 布局预览显示带有协调器布局的空白屏幕
- c++ - 常量表达式中的模板化委托复制构造函数