如果在 MQT 中,如果我对同一个表有 2 个引用约束(角色扮演),使用其中一个约束不允许优化查询
例子
事实_销售额
DIM_BILL_TO_ID --> DIM_ADDRESS
DIM_SHIP_TO_ID --> DIM_ADDRESS
销售额
DIM_ADDRESS
DIM_ADDRESS_ID
国家的名字
我使用 sql 查询定义创建了一个 MQT
MQT 1
选择 COUNTRY_NAME,SUM(SALES_AMOUNT) FROM FACT_SALES INNER JOIN DIM_ADDRESS ON FACT_SALES.DIM_BILL_TO_ID = DIM_ADDRESS.DIM_ADDRESS_ID GROUP BY COUNTRY_NAME
触发查询时,会自动进行查询重写并使用 MQT
可以说我的定义是
MQT 2
选择 a1.COUNTRY_NAME 作为 BILL_TO_NAME,a2.COUNTRY_NAM 作为 SHIP_TO_NAME,SUM(SALES_AMOUNT) FROM FACT_SALES INNER JOIN DIM_ADDRESS a1 ON FACT_SALES.DIM_BILL_TO_ID = a1.DIM_ADDRESS_ID INNER JOIN DIM_ADDRESS a2 ON FACT_SALES2.ADM_ID =SHIP
按 a1.COUNTRY_NAME,a2.COUNTRY_NAME 分组
并且被解雇的查询是
选择 COUNTRY_NAME,SUM(SALES_AMOUNT) FROM FACT_SALES INNER JOIN DIM_ADDRESS ON FACT_SALES.DIM_SHIP_TO_ID = DIM_ADDRESS.DIM_ADDRESS_ID GROUP BY COUNTRY_NAME
查询重写不会发生......但是如果我在查询中使用 BILL_TO_ID,那么查询重写就会发生......
是否存在 DB2 优化器无法理解角色扮演列的任何逻辑?
您可能希望尝试在外键上创建索引。