LIMIT
Performansı artırmak için yararlanmak istiyorsanız ,
- aldığınız verileri anlayın
- doğru sütun dizilişinin doğru indekslenmesi
- sorguyu yeniden düzenleme sorumluluğunu üstlenmek
- daha
LIMIT
önce kullanmakJOIN
Bu ilkeleri düzenleyebiliyorsanız uzun bir yol kat edebilirsiniz.
Bu kavramları bu YouTube videosunu izleyerek öğrendim (Fransız aksanıyla dikkatlice dinleyin)
Bazı kavramlardan ilk 40 makaleyi almakla ilgili çok zor bir StackOverflow sorusunu yanıtlamak için bu kavramları kullandım: 12 Mayıs 2011: Birleştirme tablosundan tek bir satır getiriliyor .
Bu soruya cevabımda (16 Mayıs 2011) , aşağıdaki sorguyu yazdım ve iyice test ettim:
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;
Lütfen sorgudaki satırı LIMIT
FROM (SELECT id FROM articles ORDER BY date_created DESC LIMIT 40) A
Bu alt sorgu üç seviye derinliğe gömüldü. Bu, kullanarak son 40 makaleyi almamı sağladı LIMIT
. Sonra gerekli JOIN'leri daha sonra gerçekleştirdim.
DERSLER ÖĞRENİLDİ
- Doing
LIMIT
alt sorgular içeride hep çünkü endeksinin kardinalitesi, veri içeriği ve gelen sonuç kümesi boyutu cevabı olmayabilir LIMIT
. Tüm "üst üste ördekler" varsa (Sorgunuz için dört prensibi göz önünde bulundurun), şaşırtıcı derecede iyi sonuçlar elde edebilirsiniz.
LIMIT
Sadece anahtarları toplayarak sorgularınızı mümkün olduğunca basit hale getirin .
LIMIT
Verimliliği artıran durumlar için bunu okumanızı öneririm : LIMIT Sorgularını Optimize Etme