哪一个更快
select * from parents p
inner join children c on p.id = c.pid
where p.x = 2
Run Code Online (Sandbox Code Playgroud)
要么
select * from
(select * from parents where p.x = 2)
p
inner join children c on p.id = c.pid
where p.x = 2
Run Code Online (Sandbox Code Playgroud)
在MySQL,第一个更快:
SELECT *
FROM parents p
INNER JOIN
children c
ON c.pid = p.id
WHERE p.x = 2
Run Code Online (Sandbox Code Playgroud)
,因为使用内联视图意味着生成并传递记录两次.
在其他引擎中,它们通常被优化为使用一个执行计划.
MySQL 在并行化和流水线化结果流方面不是很好.
喜欢这个查询:
SELECT *
FROM mytable
LIMIT 1
Run Code Online (Sandbox Code Playgroud)
是即时的,而这一个(在语义上是相同的):
SELECT *
FROM (
SELECT *
FROM mytable
)
LIMIT 1
Run Code Online (Sandbox Code Playgroud)
将首先从中选择所有值mytable,在某处缓冲它们然后获取第一条记录.
对于Oracle,SQL Server以及PostgreSQL上面的查询(以及您的两个查询)很可能会产生相同的执行计划.
| 归档时间: |
|
| 查看次数: |
166 次 |
| 最近记录: |