หากคุณต้องการใช้ประโยชน์จาก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
ภายใน subqueries อาจไม่เคยได้คำตอบเพราะ cardinality LIMIT
ของดัชนีเนื้อหาข้อมูลและขนาดผลชุดจาก หากคุณมี "เป็ดในแถว" ของคุณทั้งหมด (มีสี่หลักการในใจสำหรับการค้นหาของคุณ) คุณจะได้รับผลลัพธ์ที่ดีอย่างน่าประหลาดใจ
- ทำให้คำค้นหาของคุณง่ายที่สุดเท่าที่จะทำได้
LIMIT
โดยการรวบรวมกุญแจเท่านั้น
LIMIT
ปรับปรุงประสิทธิภาพ: การเพิ่มประสิทธิภาพการสืบค้น LIMIT