exists与inner join的效率问题

来源:互联网 发布:mysql数据存放路径 编辑:程序博客网 时间:2024/05/13 09:51

    二者并没有严格的效率高低之分,甚至依赖于数据库中数据的组织方式。

    exists的效率依赖于匹配度,join的效率则比较稳定。比如,对 select * from tableA as ta where exists (select 1from tableB as tb where  ta.id = tb.id); 每扫描ta一行,就会扫描tb,遇到匹配就返回true,没遇到匹配就会把tb一直扫描下去。

    举个极端, tb中每行的id都与ta中每行id相同
即 ta
id
1
1
1
1
1
,,,
tb
id
1
1
1
1
1
1
一扫就有返回,效率极高

反之
ta
id
1
1
1

1
1
1
1
...
tb
id
0
0
0
0
0
0
..
每扫ta一行,都要扫完tb,效率极差。


内连接效率则稳定。 在不很清楚实际数据分布情况下,最好用内连接。    .
[华 软 网]

原创粉丝点击