2
SQL Server:是否涵盖所有列的索引?
我们的团队继承了一个应用程序和关联的数据库。以前的开发人员似乎执行了一个规则,即每个表上的每个索引都有一个INCLUDE子句,以始终添加不属于键一部分的每个列。这些表平均具有2到5个索引或唯一约束以及外键。 目的是不管在数据库上引发什么查询,都是为了提高SELECT性能,因为访问是通过默认(但并非总是)检索所有列的ORM进行的。我们希望这样做的副作用是增加了存储需求(可能如此),并且增加了INSERT / UPDATE / DELETE的开销时间。 问题是,这是明智的策略吗?我们的团队具有SQL Server的历史,但是没有成员会认为自己是其内部行为的专家(尽管已经提出了一个问题,即如果该策略是最佳策略,那么现在是否将其作为默认策略?)。我们还应该期待其他哪些副作用(数据库服务器CPU /内存/ TempDB的使用情况等),或者上述某些假设是否正确? 此外,该应用程序既可以安装到SQL Server内部部署(自2012年以来的版本)中,也可以安装到Azure SQL中-如果我们为两者之间的任何差异或Azure的其他副作用做好了准备,方法?