【发布时间】:2014-04-20 07:18:47
【问题描述】:
我有这样的看法:
SELECT F1, F2
FROM T1
LEFT JOIN T2 ON T2.ID=T1.ID
LEFT JOIN T3 ON T3.ID=T1.ID
当我进行如下计数查询时:
SELECT COUNT(*) FROM MYVIEW
如果 T1 有 1000 条记录,Firebird 生成对记录的 3000 次访问:1000 次用于 T1,1000 次用于 T2,1000 次用于 T3。
有没有办法优化它?我可以直接使用表格: 从 T1 中选择 COUNT(*)
但我需要使用视图,我不能使用表格。嗯,问题比较复杂,但是我用这个简单的例子来说明基础问题。 Firebird 似乎没有优化某些查询,我的问题是我是否可以优化查询以更改视图的 DDL 中的某些内容。
【问题讨论】:
-
LEFT JOIN 应该导致返回小于 3000(即最多1000)。结果不同于 3 个单独表格上的 3 个单独计数。如果 LEFT JOIN 导致性能不佳,请检查索引和查询计划。
-
@user2864740 afaik op 指的是读取统计信息,而不是计数。
标签: firebird