a表有记录20多万条
b表有1000多条吧a表x值:
=4 大概有:1000条
=5 大概有:100条
=6 大概有:10条
为什么这样一条查询就慢死了select a.1,a.2,a.3,b.1,b.2 from b left join a on b.id=a.id where a.x=4
或者
select a.1,a.2,a.3,b.1,b.2 from a,b where b.id=a.id and a.x=4
而查询:
a.x=5或=6时候速度很快......有谁能解决不?????我是用:php+adodb来连oracle的......
b表有1000多条吧a表x值:
=4 大概有:1000条
=5 大概有:100条
=6 大概有:10条
为什么这样一条查询就慢死了select a.1,a.2,a.3,b.1,b.2 from b left join a on b.id=a.id where a.x=4
或者
select a.1,a.2,a.3,b.1,b.2 from a,b where b.id=a.id and a.x=4
而查询:
a.x=5或=6时候速度很快......有谁能解决不?????我是用:php+adodb来连oracle的......
b表数据很少,如果a表依赖b表也可以查询出正确的数据的话.
b left join a 会是更为明智的选择.以下是MySQL手册关于LEFT JOIN 的优化建议.在MySQL中,A LEFT JOIN B实现如下: 表B被设置为依赖于表A。
表A被设置为依赖于所有用在LEFT JOIN条件的表(除B外)。
所有LEFT JOIN条件被移到WHERE子句中。
进行所有标准的联结优化,除了一个表总是在所有它依赖的表之后被读取。如果有一个循环依赖,MySQL将发出一个错误。
进行所有标准的WHERE优化。
如果在A中有一行匹配WHERE子句,但是在B中没有任何行匹配LEFT JOIN条件,那么在B中生成所有列设置为NULL的一行。
如果你使用LEFT JOIN来找出在某些表中不存在的行并且在WHERE部分你有下列测试:column_name IS NULL,这里column_name 被声明为NOT NULL的列,那么MySQL在它已经找到了匹配LEFT JOIN条件的一行后,将停止在更多的行后寻找(对一特定的键组合)。