Если вы хотите воспользоваться преимуществами LIMIT
для повышения производительности, вам нужно
- понять данные, которые вы получаете
- правильное индексирование правильной последовательности столбцов
- взять на себя ответственность за рефакторинг запроса
- используя
LIMIT
передJOIN
Эти принципы могут иметь большое значение, если вы можете их организовать.
Я изучил эти понятия, посмотрев это видео на YouTube (внимательно слушайте через французский акцент)
Я использовал эти концепции, чтобы ответить на очень сложный вопрос StackOverflow о получении 40 лучших статей из некоторых таблиц: 12 мая 2011 г .: извлечение отдельной строки из таблицы соединений .
В своем ответе на этот вопрос (16 мая 2011 г.) я написал следующий запрос и тщательно его протестировал:
SELECT
AAA.author_id,
AAA.date_created,
IFNULL(BBB.title,'<NO_TITLE>') title,
IFNULL(CCC.filename,'<NO-IMAGE>') filename,
IFNULL(CCC.date_added,'<NO-IMAGE-DATE>') image_date
FROM
(
SELECT
AA.id,
AA.date_added,
BB.author_id,
BB.date_created
FROM
(
SELECT
A.id,IFNULL(MAX(B.date_added),'1900-01-01 00:00:00') date_added
FROM (SELECT id FROM articles ORDER BY date_created DESC LIMIT 40) A
LEFT JOIN article_images B ON A.id = B.article_id
GROUP BY A.id
) AA
INNER JOIN articles BB USING (id)
) AAA
LEFT JOIN article_contents BBB ON AAA.id=BBB.article_id
LEFT JOIN article_images CCC
ON (AAA.id=CCC.article_id AND AAA.date_added=CCC.date_added)
ORDER BY AAA.date_created DESC;
Обратите внимание на строку в запросе с LIMIT
FROM (SELECT id FROM articles ORDER BY date_created DESC LIMIT 40) A
Этот подзапрос скрыт на трех уровнях. Это позволило мне использовать последние 40 статей LIMIT
. Затем я выполнил необходимые соединения после этого.
УРОКИ ВЫУЧЕНЫ
- Выполнение
LIMIT
внутри подзапросов не всегда может быть ответом из-за количества индексов, содержимого данных и размера результирующего набора из LIMIT
. Если у вас есть все ваши «утки подряд» (запомните четыре принципа для вашего запроса), вы можете получить удивительно хорошие результаты.
- Сделайте ваши запросы максимально упрощенными
LIMIT
, собирая только ключи.
LIMIT
повышают эффективность: Оптимизация запросов LIMIT