เมื่อฉันเพิ่ม LIMIT 1 ลงในแบบสอบถาม MySQL จะหยุดการค้นหาหรือไม่หลังจากพบผลลัพธ์ 1 รายการ (ทำให้เร็วขึ้น) หรือยังคงดึงผลลัพธ์ทั้งหมดและตัดทอนในตอนท้าย?
เมื่อฉันเพิ่ม LIMIT 1 ลงในแบบสอบถาม MySQL จะหยุดการค้นหาหรือไม่หลังจากพบผลลัพธ์ 1 รายการ (ทำให้เร็วขึ้น) หรือยังคงดึงผลลัพธ์ทั้งหมดและตัดทอนในตอนท้าย?
คำตอบ:
ขึ้นอยู่กับข้อความค้นหาการเพิ่มข้อ จำกัด อาจมีผลอย่างมากต่อประสิทธิภาพ หากคุณต้องการเพียงแถวเดียว (หรือทราบว่ามีเพียงแถวเดียวเท่านั้นที่สามารถตอบสนองการสืบค้นได้) และไม่แน่ใจว่าเครื่องมือเพิ่มประสิทธิภาพภายในจะดำเนินการอย่างไร (ตัวอย่างเช่น WHERE clause ไม่ตีดัชนีเป็นต้น) คุณควรเพิ่ม LIMIT อนุประโยค
สำหรับคำค้นหาที่ปรับให้เหมาะสม (โดยใช้ดัชนีบนตารางขนาดเล็ก) อาจไม่สำคัญกับประสิทธิภาพมากนัก แต่อีกครั้ง - หากคุณสนใจเพียงแถวเดียวมากกว่าที่จะเพิ่มส่วนคำสั่ง LIMIT โดยไม่คำนึงถึง
ขีด จำกัด อาจส่งผลต่อประสิทธิภาพของแบบสอบถาม (ดูความคิดเห็นและลิงค์ด้านล่าง) และยังลดชุดผลลัพธ์ที่ส่งออกโดย MySQL สำหรับข้อความค้นหาที่คุณคาดหวังผลลัพธ์เดียวจะมีประโยชน์
ยิ่งไปกว่านั้นการ จำกัด ชุดผลลัพธ์สามารถเร่งเวลาในการสืบค้นทั้งหมดได้เนื่องจากการถ่ายโอนชุดผลลัพธ์ขนาดใหญ่ใช้หน่วยความจำและอาจสร้างตารางชั่วคราวบนดิสก์ ฉันพูดถึงสิ่งนี้เนื่องจากฉันเพิ่งเห็นแอปพลิเคชันที่ไม่ได้ใช้การ จำกัด การฆ่าเซิร์ฟเวอร์เนื่องจากชุดผลลัพธ์ขนาดใหญ่และด้วยขีด จำกัด การใช้ทรัพยากรจึงลดลงอย่างมาก
ตรวจสอบหน้านี้เพื่อดูรายละเอียดเพิ่มเติม: เอกสาร MySQL: LIMIT Optimization
หากมีผลลัพธ์กลับมาเพียง 1 รายการไม่ LIMIT จะไม่ทำให้เร็วขึ้น หากมีผลลัพธ์จำนวนมากและคุณต้องการเพียงผลลัพธ์แรกและไม่มี GROUP หรือ ORDER ตามคำสั่ง LIMIT จะทำให้เร็วขึ้น
คำตอบสั้น ๆ คือใช่ หากคุณ จำกัด ผลลัพธ์ไว้ที่ 1 แม้ว่าคุณจะ "คาดหวัง" ผลลัพธ์เดียวการสืบค้นจะเร็วขึ้นเนื่องจากฐานข้อมูลของคุณจะไม่ดูบันทึกทั้งหมดของคุณ มันจะหยุดเมื่อพบบันทึกที่ตรงกับข้อความค้นหาของคุณ
หากคุณคาดหวังเพียงผลลัพธ์เดียวจริงๆคุณควรเพิ่ม LIMIT ต่อท้ายข้อความค้นหาของคุณ ฉันไม่รู้การทำงานภายในของ MySQL แต่ฉันแน่ใจว่าจะไม่รวบรวมชุดผลลัพธ์ 100'000 + บันทึกเพียงเพื่อตัดทอนกลับเป็น 1 ในตอนท้าย ..
UNIQUE
(หรือPRIMARY KEY
) จำกัด (หรือดัชนี) ในคอลัมน์กรอง stackoverflow.com/questions/8467092/…