- 论坛徽章:
- 0
|
select d023.code
from d023, d023a, d023d, z001
where d023.attr=d023a.code
and d023d.code=d023a.code
and d023d.z001=z001.ser
and d023.name=funame
and z001.pcode=fjcode
and d023d.allow='T'
你一直这么写吗?这样要先建立几个表的笛卡尔积,应该很影响速度的。为什么不用联结操作呢?
呵呵,不好意思才看见,回lilongyuan的话:
一.这只是一个示例,说明问题用的,我并不一直这样写。
二.联接操作和where条件语句在原理上没有太大的区别,主要是为了解决二义性问题,为此实际测试的系统开销还略有增加,在数据库较高连接数(超过15个连接)时性能降低约百分之五以上。这也说明,联接操作在内部实际上也产生笛卡尔积,它并不因为用了join而自动消失,只是在内部逻辑中将它清理掉了。
三.同样的问题在过程中的解决方法,可以分解为若干简单的操作,效率来得更高。这是因为简单操作都是调用libpq内的原子操作,效果直接而了当,不需要为复杂语句生成额外的空间和负荷。 |
|