我有这样的视图:
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条记录访问:T1为1000条,T2为1000条,T3为1000条。
有办法优化它吗?我可以直接使用表格:SELECT COUNT(*) FROM T1
但是我需要使用视图,我不能使用表。这个问题更复杂,但是我用这个简单的例子来说明基的问题。火鸟似乎没有优化一些查询,我的问题是,如果我可以优化查询改变的东西在视图的DDL。
从T1
到T2
(和T3
)的JOIN
可以产生比T1
更多的记录。假设对于T1
中的每条记录,T2
中有两条记录,那么对于T1
中的1000条记录,计数的结果是2000。
理论上,优化器可以知道T1.ID
和T2.ID
都是主键(或唯一键),因此只扫描T1
,但Firebird中的优化器不是很先进,所以可能它根本无法做到这一点。