简单的SQL查询

Omu*_*Omu 1 sql performance

哪一个更快

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)

Qua*_*noi 6

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上面的查询(以及您的两个查询)很可能会产生相同的执行计划.