เมื่อคุณCOUNT(*)
ใช้ดัชนีคอลัมน์การนับดังนั้นจึงเป็นผลลัพธ์ที่ดีที่สุด Mysql ที่มีเอ็นจิ้นMyISAMจะเก็บการนับแถวมันจะไม่นับแถวทั้งหมดในแต่ละครั้งที่คุณพยายามนับแถวทั้งหมด (ตามคอลัมน์ของคีย์หลัก)
การใช้ PHP เพื่อนับแถวนั้นไม่ค่อยฉลาดนักเพราะคุณต้องส่งข้อมูลจาก mysql ไปยัง php ทำไมในเมื่อคุณสามารถบรรลุสิ่งเดียวกันในฝั่ง mysql?
ถ้าCOUNT(*)
ช้าคุณควรเรียกใช้EXPLAIN
แบบสอบถามและตรวจสอบว่ามีการใช้ดัชนีจริงหรือไม่และควรเพิ่มที่ใด
ต่อไปนี้ไม่ใช่วิธีที่เร็วที่สุดแต่มีบางกรณีที่COUNT(*)
ไม่เหมาะสมจริงๆ - เมื่อคุณเริ่มจัดกลุ่มผลลัพธ์คุณอาจพบปัญหาโดยที่COUNT
ไม่ได้นับแถวทั้งหมดจริงๆ
วิธีแก้คือSQL_CALC_FOUND_ROWS
. โดยปกติจะใช้เมื่อคุณเลือกแถว แต่ยังจำเป็นต้องทราบจำนวนแถวทั้งหมด (เช่นสำหรับการเพจ) เมื่อคุณเลือกแถวข้อมูลเพียงแค่ต่อท้ายSQL_CALC_FOUND_ROWS
คำสำคัญหลัง SELECT:
SELECT SQL_CALC_FOUND_ROWS [needed fields or *] FROM table LIMIT 20 OFFSET 0;
หลังจากที่คุณเลือกแถวที่ต้องการแล้วคุณจะได้รับการนับด้วยแบบสอบถามเดียวนี้:
SELECT FOUND_ROWS();
FOUND_ROWS()
จะต้องถูกเรียกทันทีหลังจากแบบสอบถามเลือกข้อมูล
สรุปแล้วทุกอย่างขึ้นอยู่กับจำนวนรายการที่คุณมีและสิ่งที่อยู่ในคำสั่ง WHERE คุณควรให้ความสนใจกับการใช้ดัชนีเมื่อมีแถวจำนวนมาก (หลายหมื่นหลายล้านขึ้นไป)
SELECT 1
SELECT *
มีความแตกต่างหรือไม่?