Jika Anda ingin memanfaatkan LIMIT
untuk meningkatkan kinerja, Anda perlu
- memahami data yang Anda ambil
- pengindeksan yang tepat urutan kolom yang benar
- bertanggung jawab untuk refactoring permintaan
- gunakan
LIMIT
sebelumnyaJOIN
Prinsip-prinsip ini bisa sangat bermanfaat jika Anda dapat mengaturnya.
Saya mempelajari konsep-konsep ini dengan menonton Video YouTube ini (dengarkan baik-baik melalui aksen Prancis)
Saya menggunakan konsep-konsep itu untuk menjawab pertanyaan StackOverflow yang sangat sulit tentang mendapatkan 40 artikel teratas dari beberapa tabel: 12 Mei 2011: Mengambil Satu Baris dari Bergabung dengan Tabel .
Dalam jawaban saya untuk pertanyaan itu (16 Mei 2011) , saya menulis pertanyaan berikut dan mengujinya secara menyeluruh:
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;
Harap perhatikan baris dalam kueri dengan LIMIT
FROM (SELECT id FROM articles ORDER BY date_created DESC LIMIT 40) A
Subquery ini terkubur dalam tiga level. Ini memungkinkan saya untuk menggunakan 40 artikel terakhir LIMIT
. Kemudian, saya melakukan GABUNGAN yang diperlukan setelah itu.
PELAJARAN YANG DIPELAJARI
- Melakukan
LIMIT
subqueries di dalam mungkin tidak selalu menjadi jawaban karena kardinalitas indeks, konten data, dan ukuran set hasil dari LIMIT
. Jika Anda memiliki semua "bebek berturut-turut" (Perhatikan empat prinsip untuk kueri Anda), Anda dapat memperoleh hasil yang sangat bagus.
- Buat pertanyaan Anda sesederhana mungkin ketika dilakukan
LIMIT
dengan mengumpulkan kunci saja.
LIMIT
meningkatkan efisiensi: Mengoptimalkan Pertanyaan LIMIT