如果我无法更改基表,我将创建一个 VIEW 将五个非规范化列转换为两列:origin 和 value。所以假设你有这个:
Table notNormal (
primaryKey,
someValue,
foreignNotNormal01,
foreignNotNormal02,
foreignNotNormal03,
foreignNotNormal04,
foreignNotNormal05
)
我会创建这个:
CREATE MATERIALIZED VIEW fixedThis AS
SELECT primaryKey, someValue, 'FKCOL01' AS foreignNotNormalOrigin, foreignNotNormal01 AS foreignNotNormalColValue
WHERE foreignNotNormal01 IS NOT NULL
UNION
...
...
SELECT primaryKey, someValue, 'FKCOL01' AS foreignNotNormalOrigin, foreignNotNormal05 AS foreignNotNormalColValue
WHERE foreignNotNormal05 IS NOT NULL
然后我对 fixedThis 的 SELECTS 只显示外键列中的值的结果,无论它们可能是什么。
如果您只是想要一个简单的加速,那么索引是可行的方法,但实际上,您需要修复数据模型。