Roc*_*lan 6 index sql-server index-tuning
假设我有一个看起来像这样的表:
CREATE TABLE Activity (
ActivityID int primary key identity(1,1) ,
ActivityName nvarchar(10),
InactiveFlag bit
)
Run Code Online (Sandbox Code Playgroud)
具有如下所示的索引:
CREATE INDEX Activity_Index on Activity
(
ActivityName
)
Run Code Online (Sandbox Code Playgroud)
然后出于某种原因,有人创建了第二个索引:
CREATE INDEX Another_Activity_Index on Activity
(
ActivityName, InactiveFlag
)
Run Code Online (Sandbox Code Playgroud)
删除第一个索引绝对安全吗?它只是占用了不必要的磁盘空间吗?第二个索引会覆盖第一个索引的所有情况吗?列排序绝对是“ActivityName”第一。
在这种情况下,我认为第一个索引是多余的(而且不太有用)。请注意,删除索引将使引用它的任何计划无效,因此下次运行任何这些查询时,由于需要重新编译才能访问第二个索引,因此您可能会看到性能下降。虽然两个索引都存在,但任何只需要对 ActivityName 进行操作的查询都可能会选择第一个索引,因为它更薄。
如果第二个索引中的第二列更宽一些,那么我对删除第一个索引的建议可能就不那么傲慢了。varchar例如,如果该列是宽的,那么在必要时(并且当varchar不需要该列进行输出或过滤时)使用索引所需的额外 I/O实际上会生成第一个索引(即使它在技术上是多余的)更希望满足这种类型的查询。
所以,只是一种冗长的说法:这取决于。:-)
| 归档时间: |
|
| 查看次数: |
276 次 |
| 最近记录: |