数据库里面有两张表 A表100W,B表20W,sql语句是 select coun(1) from A left join B on a.id = b.id 查询结果执行10秒
后面在写一条 select count(1) from B inner join A on B.id = A.id
查询结果只需0.几就出来了 给我的感觉就是第一条没用到索引 为什么会出现这种情况?
如果直接用 select count(1) from A ,B where a.id = b.id 执行效果和第二条差距不大.
我以前主要是在sqlserver上面开发,现在突然发现在oracle上执行一样的语句效率还要低些,现在大多数sql语句都是用的外连接,杂办?难道只有改代码?oracle数据库sqlserverleft joincount
后面在写一条 select count(1) from B inner join A on B.id = A.id
查询结果只需0.几就出来了 给我的感觉就是第一条没用到索引 为什么会出现这种情况?
如果直接用 select count(1) from A ,B where a.id = b.id 执行效果和第二条差距不大.
我以前主要是在sqlserver上面开发,现在突然发现在oracle上执行一样的语句效率还要低些,现在大多数sql语句都是用的外连接,杂办?难道只有改代码?oracle数据库sqlserverleft joincount
多看看你的SQL的执行计划,看看索引情况。
100万*20万 的数量级集合select count(1) from B inner join A on B.id = A.id
20万*A表满足(B.id = A.id)的数量级集合所以查询时间肯定不一样
a.cid >= 0 and b.id >= 0 改成这样就只需要0.5秒,下面的截图是第一个sql语句的执行计划.
想要提高查询速度,就应该避免全表扫描你可以给SQL加上hint 或者索引。。
因为NULL值与索引的特性所决定的。即null值不会被存储到B树索引。因此应该为表 t 的列 object_id 添加 not null 约束。 设计表的时候注意非空字段.哎.