物化视图仅用于覆盖索引

问题描述

给出以下车型年份的表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中不存在。