内连接外连接子查询效率比较,请高手指点
大家好,我想问一个查询效率的问题,关于内联外联和子查询那个效率高
数据库
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应该更快。