sql-server - SQL Server 是否在查询计划中考虑哪个索引已经在内存中(缓存)?
问题描述
我想知道 SQL 服务器(或其他 RDBMS)在创建查询计划时是否考虑它在内存中已有的内容,例如:
有 2 个索引在服务请求方面几乎同样出色,但其中一个已经完全或部分在内存中,而另一个没有。
这是计划者考虑的事情,还是从光盘加载索引被认为不太重要,或者很难正确实现这样的功能?
解决方案
只说 SQL Server,优化器在生成计划时并不考虑索引页是否被缓存。缓存使用 LRU-K 算法独立管理,因此最近使用的数据具有更高的索引权重。
除非候选索引在所有方面都是相同的(冗余索引是一件坏事),否则没有“差不多一样好”。在我的经验中,决胜局是最窄的。
我推测它不会很难实现,但会增加显着的编译成本,而在实际工作负载中没有价值。
推荐阅读
- java - PrintWriter 构造函数
- dart - Dart 名称冲突解决方案
- typescript - 如何在 Vue Router v4 中为自定义元字段声明 TypeScript 类型接口?
- ios - 如何使用 Swift 中的按钮从数组中更新 tableView 中的单元格?
- android - 框架“shared.framework”缺少此目标所需的一个或多个架构:arm64。Xcode 12.0 科特林 1.4.10
- r - 如何创建一个矩阵,将所有行重新排序,使一列按降序排列?
- c++ - 是否可以将文本文件设置为 UTF-16?
- javascript - 选择选项值在节点 js 中未定义
- python - 熊猫工作了,现在不行了
- javascript - 为什么在锚标签的href属性中使用“javascript:function()”来调用javascript函数