postgresql - PostgreSQL覆盖索引和主键
问题描述
我在文档中找不到它,但我应该将表的主键包含在覆盖索引中吗?
查询(简化):SELECT id, y FROM table WHERE x=5
指数:CREATE INDEX idx_1 ON table(x) INCLUDE(id, y)
还是只是... INCLUDE(y)
?
解决方案
在 PostgreSQL 中,自动包含在指向表行的索引中的东西是称为“ctid”的系统列。主键不会自动包含在索引中,因此如果要包含它,则需要指定它。
但是没有理由将它包含在 INCLUDE 中,而只是将其直接放入索引主列列表中CREATE INDEX idx_1 ON table(x, y, id)
。使用 INCLUDE 的原因是,如果您希望索引在列列表的某些前缀上是唯一的,或者列是不支持排序运算符的类型,因此不能在 btree 的主列列表中指数。
推荐阅读
- node.js - 在 gRPC 中捕获请求/响应 | 如何在 node.js 中使用 gRPC 服务器拦截器?
- ruby - 从 Ruby 3.0 需要 pg 时获取“找不到指定的模块”
- sql-server - 如何按月()分组但转移?
- node.js - 如何在同一个项目中为不同的用户创建两个本地策略?
- r - 'rmarkdown::render' 编织时未发现错误
- python - 模块“熊猫”没有属性“fillna”
- http - gRPC 客户端无法连接到服务器解析 HTTP/2 失败,仅在我的计算机上
- asp.net - 如何在 asp.net 中使用 keyCode 属性
- flutter - 访问 Statefull Widget 的状态
- python - 如何修复 Tkinter 因数据量大而死机或崩溃的问题?