Якщо ви хочете скористатися 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 Queries