我不确定这个问题的标题是否正确.
我有一个表,例如users包含不同类型的用户.像用户类型10, 20, 30等.
在一个查询中,我需要加入user表,但我只想要用户类型20.所以下面哪个查询执行得更好.
SELECT fields
FROM consumer c
INNER JOIN user u ON u.userid = c.userid
WHERE u.type = 20
Run Code Online (Sandbox Code Playgroud)
用另一种方式,
SELECT fields
FROM consumer c
INNER JOIN (SELECT user_fields FROM user WHERE type = 20) u ON u.userid = c.userid
Run Code Online (Sandbox Code Playgroud)
请指教.
让我们从这个查询开始:
SELECT . . .
FROM consumer c INNER JOIN
user u
ON u.userid = c.userid
WHERE u.type = 20;
Run Code Online (Sandbox Code Playgroud)
假设这种type情况比较少见,您需要表上的索引.最好的指标可能user(type, userid)和customer(userid).索引user(userid, type)可能会更好(如果userid是群集主键,则不需要).
第二个查询...好吧,从SQL Server的角度来看,它可能是相同的.为什么?SQL Server有一个很好的优化器.如果您愿意,可以查看执行计划.由于优化器:
where条款不一定要在之前进行评估join.SQL Server足够聪明,可以重新安排操作.并非所有优化者都这么聪明.在MySQL,MS Access或SQLite等数据库中,我很确定第一个版本比第二个版本要好得多.
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |