我正在运行一个旧的生产应用程序,它有一个后端数据库托管在兼容模式 80 (SQL2000) 的 SQL2008R2 上。当我运行一些 TSQL 来查看实际执行计划时,SSMS 会给我建议的索引,这些索引仅对 SQL2005+ 合法,例如包含列的索引。我怎样才能阻止它这样做?我想查看它可能建议的合理索引。
注意:兼容模式无法更改。是的,我们正在更换应用程序,这将完全消除对数据库的需求,但不会持续一段时间。
注意:已经尝试过,SSMS 被配置为“服务器版本脚本”作为 SQL Server 2000。
我的数据库也停留在 CL80,也在 2008r2:我刚刚测试过,它们允许
INCLUDE
定义带有 ed 列的索引。我没有明确测试过它们是否被正确使用,因此在依赖此检查适当的查询以查看创建了哪些计划之前。如果包含的列没有正确使用以避免查找,您可以将它们转换为已使用的列,即- 编辑:根据 Paul 的评论,CREATE INDEX ix_test_u1_i2 ON tbl_test (i1) INCLDUE (i2)
变成CREATE INDEX ix_test_u1_i2 ON tbl_test (i1, i2)
. 不过,请对结果进行基准测试,或在您的索引维护计划中考虑它,因为如果后面的列相当随机,您可能会显着增加索引碎片的级别(通过插入/更新时的页面拆分)。INCLUDE
查询计划器正确使用了使用 ed 列创建的索引,因此该评论没有实际意义。当然,如果您的应用程序具有仍在SQL2000 上实际运行的实例,而不是仅仅将 CL 设置为 80,那么这会改回......顺便说一句:SSMS 显示的缺失索引信息只应被视为您考虑某事的建议 - 这些建议可能对整个应用程序有害,特别是如果您遵循所有这些建议(使用的额外空间可能相当大).