sql - 仅用于覆盖索引的物化视图
问题描述
给定下表car_year
的汽车型号年份:
| id | maker | model | year |
----------------------------------
| 6 | Audi | Allroad | 2001 |
| 12 | Audi | A8 | 2008 |
| 14 | Ford | Mustang | 1996 |
| 15 | Honda | Civic | 2000 |
| 19 | Honda | Insight | 2000 |
| 22 | Ford | F150 | 2009 |
| 24 | Honda | Accord | 2000 |
| 28 | Ford | F150 | 2007 |
| 34 | Audi | S8 | 2002 |
| 48 | Ford | Expedition | 2011 |
| 62 | Ford | Escort | 2004 |
| 81 | Ford | Explorer | 2007 |
| 84 | Ford | Escape | 2006 |
| 93 | Honda | Accord | 1995 |
我想有一个“最早的制造商模型”的覆盖指数。我的解决方案是创建一个物化视图:
CREATE MATERIALIZED VIEW earliest AS
SELECT DISTINCT ON(maker) maker, model
FROM car_year
ORDER BY maker, year
然后是覆盖索引:
CREATE INDEX earliest_index ON earliest(maker) INCLUDE (model);
有用!但是物化视图是无用的(对我来说),因为我只会使用覆盖索引。我是否缺少更优雅的解决方案,或者我不知道的(Postgre)SQL 功能?
解决方案
如果我猜对了,您是在要求一个“索引组织表”(或在这种情况下索引组织的物化视图),这是一个真正是索引的表。这样您就不必浪费两倍的存储空间,一次用于您从不使用的表,一次用于您想要对其执行仅索引扫描的索引。
答案是这种“索引组织表”在 PostgreSQL 中不存在。
推荐阅读
- julia - Julia - 控制台的行为不同于 include("myfile.jl")
- graphql - 如何处理 GraphQL 模式中的空值
- python - PyCharm:无法安装 opencv-contrib-python
- javascript - 设置所选单选按钮的背景颜色
- excel - 基于在另一个表中查找代码和值的 Excel 总和
- excel - 用它的列的平均值替换值 - 许多列
- flutter - 如何使我的 Scaffold 小部件可滚动,这样我就不会出现“xx 像素溢出底部”错误
- angular - 任何 Angular 应用程序都没有在任何浏览器上运行
- java - 设置在 JRadioButton 上可见的 JLabel 单击
- javascript - 解释函数中间件