В MySQL
первый быстрее:
SELECT *
FROM parents p
INNER JOIN
children c
ON c.pid = p.id
WHERE p.x = 2
, поскольку использование встроенного представления подразумевает создание и передачу записей дважды.
В других движках они обычно оптимизированы для использования одного плана выполнения.
MySQL
не очень хорош для распараллеливания и конвейеризации потоков результатов.
Понравился запрос:
SELECT *
FROM mytable
LIMIT 1
является мгновенным, в то время как этот (который семантически идентичен):
SELECT *
FROM (
SELECT *
FROM mytable
)
LIMIT 1
сначала выберет все значения из mytable
, буферизует их где-то и затем извлечет первую запись.
Для Oracle
, SQL Server
и PostgreSQL
приведенные выше запросы (и оба ваших запроса), скорее всего, приведут к тем же планам выполнения.