子查询中的`SELECT`和`FROM`之间是否存在性能差异?

时间:2016-10-17 06:02:44

标签: mysql sql derived-table

这些查询返回相同的结果,这是更好的性能吗?

SELECT

中的子查询
SELECT
    books.id,
    books.title,
    (SELECT COUNT(*) FROM subscriptions WHERE books.id = subscriptions.book_id) AS subscription_count,
    (SELECT COUNT(*) FROM books) AS book_count
FROM books
ORDER BY id;

FROM

中的子查询
SELECT
    *
FROM
    (SELECT
        books.id,
        books.title,
        (SELECT COUNT(*) FROM subscriptions WHERE books.id = subscriptions.book_id) AS subscription_count,
        (SELECT COUNT(*) FROM books) AS book_count
    FROM books) AS tmp
ORDER BY id;

在这种情况下,我应该从其他sql获得book_count吗?

1 个答案:

答案 0 :(得分:0)

您正在使用的是一个派生表,对于现代DBMS,没有任何性能差异。所以

select * 
from some_table
order by some_column;

完全的性能相同:

select *
from (
  select *
  from some_table
) t
order by some_column;