首页 > 解决方案 > SQL Server 是否在查询计划中考虑哪个索引已经在内存中(缓存)?

问题描述

我想知道 SQL 服务器(或其他 RDBMS)在创建查询计划时是否考虑它在内存中已有的内容,例如:

有 2 个索引在服务请求方面几乎同样出色,但其中一个已经完全或部分在内存中,而另一个没有。

这是计划者考虑的事情,还是从光盘加载索引被认为不太重要,或者很难正确实现这样的功能?

标签: sql-serverindexingquery-planner

解决方案


只说 SQL Server,优化器在生成计划时并不考虑索引页是否被缓存。缓存使用 LRU-K 算法独立管理,因此最近使用的数据具有更高的索引权重。

除非候选索引在所有方面都是相同的(冗余索引是一件坏事),否则没有“差不多一样好”。在我的经验中,决胜局是最窄的。

我推测它不会很难实现,但会增加显着的编译成本,而在实际工作负载中没有价值。


推荐阅读