泰迪身高月份对照表:这两个sql查询语句哪个更快?

来源:百度文库 编辑:高考问答 时间:2024/05/10 05:44:37
两个表
TableA:
id name
1 a
2 b
3 c
......
TableB:
id value
1 A
2 B
3 C
......
现在要查出所有TableA的name列like '%b%'所对应的TableB的value
有这两个sql语句,哪个效率更高呢?
A:select b.value from TableA a, TableB where a.id = b.id and a.name like '%b%';
B:select value from TableB where id in (select id from TableA where name like '%b%');
说明理由,还有就是如何看一个语句执行花费的时间呢?
再补充一个:
C:select b.value from (select * from TableA where name like '%b%') a, TableB b where a.id = b.id;
三楼提到join,A和C都是全联结,到了数据库他会自动转换的吧。对于C,我觉得他先对TableA查询得到的数量大大减少,再联合TableB,速度是不是会比A快呢?

TableA, TableB的记录都会在1万条以上。

A快.
理由.两个都是检索了两个表.
A 先查出a.id = b.id的记录 然后再查 a.name like '%b%'
B 先查出a.name like '%b%' 的所有记录 然后在查处 TableB.id in 这个记录集的记录
诈看上去意思都一样..但是B用了 IN 这个查询语句中比较拉速度的关键词!
所以速度降低!

至于查看时间.你可以找些软件.或者自己编一个. 但大数据量的时候就会体现出差距

想再快!用连接查询(JOIN)

A效率高,A是单次循环查询,B属于多次双循环,所以A效率高,具体执行时间还真不知道怎么看,反正都是一瞬间

添加2万条记录

实际操作一下

A快。
我觉得不该从联合查询的角度考虑。B,C都是进行了两次搜表查询,select id from TableA where name like '%b%',再从所得的结果中select value。
等于对数据搜了两遍。也就是对第一遍选中的数据,再一次读取并与第二次的条件比较,而A方法只对同一数据进行了一次比较。如果数据量大的话效率会比较低。