日期:2014-05-17  浏览次数:20630 次

内连接外连接子查询效率比较,请高手指点
大家好,我想问一个查询效率的问题,关于内联外联和子查询那个效率高

数据库 

A表

id name
1 小白
2 小红
3 小黑

B表

id pid type
1 1 S
2 1 S
3 1 L
4 2 L
5 2 L
6 3 S

其中 Pid 是外键

现在要查询小白的每个类型多少个

SELECT Name,
(SELECT count(*) from B where B.pid=A.id and B.type = 'S') as 总S,
(SELECT count(*) from B where B.pid=A.id and B.type = 'L') as 总L 
from A where A.Name = '小白' 

这个是子查询,然后下面用的内连接

SELECT A.[name],
(CASE WHEN B.[type] = 'S' THEN count(B.[type]) end) AS 总S,
(CASE WHEN B.[type] = 'L' THEN count(B.[type]) end) AS 总L
FROM A inner join B on A.id=B.pid WHERE A.[name] = '小白' 
GROUP BY A.[name],B.[type]

请问这俩种哪个查询效率高,一般情况下应该用子查询还是内联查询?
数据库

------解决方案--------------------
一般用内连接, lz可以使用ctrl+L 查看执行计划。


------解决方案--------------------
物理读取,是从磁盘读取到内存中,
逻辑读取,是查询执行器通过访问方法尝试读取的次数。
------解决方案--------------------
像你这个,联接后使用group by应该更快。