子查询和连接查询的效率, 很多人会说子查询,现在看下面
1).select a.id from a, b where a.bid=b.id and b.id=1
2).select a.id from a where a.bid in (select id from b where b.id =1)
a表m数据行, b表n数据行
从数学角度看当)select a.id from a where a.bid in (结果集)因为结果集是1, 效率是m+n
而select a.id from a, b where a.bid=b.id and b.id=1是一个笛卡尔积, 效率是m*n
显然子查询效率要高,
现在测试数据
go+mysql
m =1w , n=1w
50次相同操作1).的结果是3.2ms , 2).的结果是27 s 单位没错, 一个是ms一个是s,近似10000倍(这里有点不严谨,因为时间问题没来得及做更多test),
就算是select a.id from a where a.bid in (select id from b where b.id =1), 逐行查找时重新效率也是m*n,那么时间去哪了?
若干时间后知道,数据库在子查询时候将会把子查询转换成连接查询,因此会增加时间,但是不确定的是哪些数据库是这样做的