0

有没有办法预先聚合聚合函数(fi count())的结果并将其存储在索引中?

背景是:我想加快 count() 查询。以便:

从 TE123 中选择 count(users) where region = 'A';

将由诸如 Region Count(Users) A 548 E 458 之类的索引支持

我知道 MQT 也有助于解决这个问题。但是,在这种情况下,不可能使用 MQT,因为我们使用一种 ORM,并且我们不想在 MQT 上定义实体。

我只是稍微记得——一位 DBA 告诉我——为 DB2 V10 计划了这样一个功能。

4

1 回答 1

0

即使不重写查询,MQT 可能仍然会有所帮助。

物化查询表可以显着提高查询的性能,尤其是复杂查询。如果优化器确定可以使用 MQT 解析查询或查询的一部分,则可能会重写查询以利用 MQT。

来源

对于 z/OS:

使用称为自动查询重写的过程,DB2® 可以识别何时可以透明地重写提交的查询以使用具体化查询表中存储的结果。通过查询具体化查询表而不是从底层基表计算结果,DB2 可以更有效地处理一些复杂的查询。

来源

对于 Linux/Unix/Windows:

MQT 知识集成到 SQL 和 XQuery 编译器中。在编译器中,查询重写阶段和优化器将查询与 MQT 匹配,并确定是否在访问基表的查询中替换 MQT。如果使用 MQT,解释工具可以提供有关选择了哪个 MQT 的信息。在这种情况下,用户需要对基表而不是重新路由的 MQT 的访问权限。

来源

于 2012-11-29T17:02:23.700 回答