Производительность MySQL: SELECT с внутренним запросом vs CROSS JOIN (возврат COUNT с данными в одном запросе)

RE эти два ответа на старый вопрос: Ответ 1 , Ответ 2 .

У меня есть запрос, который выбирает 14 столбцов и использует 10 LEFT JOINs, которые я попытался упростить ниже. Я надеюсь, что вы сможете вернуть итоговые результаты COUNT (независимо от LIMIT / OFFSET) в рамках одного и того же запроса.

Мой вопрос: есть ли резкое различие в производительности в зависимости от того, какой из двух ответов я использую, или они в значительной степени делают то же самое?

например, ответ 1

SELECT
a.id,
b.name AS course,
DATE_FORMAT(a.start_date,'%d %M %Y') AS start_date,
DATE_FORMAT(a.end_date,'%d %M %Y') AS end_date,
/* MANY MORE FIELDS IN SELECT STATEMENT */,
(SELECT COUNT(*) AS count FROM courses AS a /* LEFT JOINs & WHEREs */) AS count,
FROM courses AS a
/* MANY LEFT JOINS */
WHERE
a.start_date > CURRENT_DATE(),
/* A FEW MORE WHERE STATEMENTS */
LIMIT 5 OFFSET 15

или ответ 2

SELECT
a.id,
b.name AS course,
DATE_FORMAT(a.start_date,'%d %M %Y') AS start_date,
DATE_FORMAT(a.end_date,'%d %M %Y') AS end_date,
/* MANY MORE FIELDS IN SELECT STATEMENT */,
z.count
FROM courses AS a
/* MANY LEFT JOINS */,
(SELECT COUNT(*) AS count FROM courses AS a /* LEFT JOINs/WHEREs */) AS z
WHERE
a.start_date > CURRENT_DATE(),
/* A FEW MORE WHERE STATEMENTS */
LIMIT 5 OFFSET 15

Прямо сейчас с несколькими тестовыми записями нет разницы, но мне интересно, есть ли простой ДА / НЕТ, когда мы возвращаем 100 или 1000 записей?

mysql,sql,

0

Ответов: 0

Производительность MySQL: SELECT с внутренним запросом vs CROSS JOIN (возврат COUNT с данными в одном запросе)

RE эти два ответа на старый вопрос: Ответ 1 , Ответ 2 .

У меня есть запрос, который выбирает 14 столбцов и использует 10 LEFT JOINs, которые я попытался упростить ниже. Я надеюсь, что вы сможете вернуть итоговые результаты COUNT (независимо от LIMIT / OFFSET) в рамках одного и того же запроса.

Мой вопрос: есть ли резкое различие в производительности в зависимости от того, какой из двух ответов я использую, или они в значительной степени делают то же самое?

например, ответ 1

SELECT
a.id,
b.name AS course,
DATE_FORMAT(a.start_date,'%d %M %Y') AS start_date,
DATE_FORMAT(a.end_date,'%d %M %Y') AS end_date,
/* MANY MORE FIELDS IN SELECT STATEMENT */,
(SELECT COUNT(*) AS count FROM courses AS a /* LEFT JOINs & WHEREs */) AS count,
FROM courses AS a
/* MANY LEFT JOINS */
WHERE
a.start_date > CURRENT_DATE(),
/* A FEW MORE WHERE STATEMENTS */
LIMIT 5 OFFSET 15

или ответ 2

SELECT
a.id,
b.name AS course,
DATE_FORMAT(a.start_date,'%d %M %Y') AS start_date,
DATE_FORMAT(a.end_date,'%d %M %Y') AS end_date,
/* MANY MORE FIELDS IN SELECT STATEMENT */,
z.count
FROM courses AS a
/* MANY LEFT JOINS */,
(SELECT COUNT(*) AS count FROM courses AS a /* LEFT JOINs/WHEREs */) AS z
WHERE
a.start_date > CURRENT_DATE(),
/* A FEW MORE WHERE STATEMENTS */
LIMIT 5 OFFSET 15

Прямо сейчас с несколькими тестовыми записями нет разницы, но мне интересно, есть ли простой ДА / НЕТ, когда мы возвращаем 100 или 1000 записей?

00MySQL, MS SQL,
Похожие вопросы