为什么Firebird访问连接表时要进行简单的计数



我有这样的视图:

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。

T1T2(和T3)的JOIN可以产生比T1更多的记录。假设对于T1中的每条记录,T2中有两条记录,那么对于T1中的1000条记录,计数的结果是2000。

理论上,优化器可以知道T1.IDT2.ID都是主键(或唯一键),因此只扫描T1,但Firebird中的优化器不是很先进,所以可能它根本无法做到这一点。

相关内容

  • 没有找到相关文章

最新更新