ฉันต้องการวิธีที่รวดเร็วในการนับจำนวนแถวในตารางของฉันที่มีหลายล้านแถว ฉันพบโพสต์ " MySQL: วิธีที่เร็วที่สุดในการนับจำนวนแถว " ใน Stack Overflow ซึ่งดูเหมือนว่าจะช่วยแก้ปัญหาของฉันได้ Bayuahให้คำตอบนี้:
SELECT
table_rows "Rows Count"
FROM
information_schema.tables
WHERE
table_name="Table_Name"
AND
table_schema="Database_Name";
ซึ่งฉันชอบเพราะมันดูเหมือนการค้นหาแทนที่จะสแกนดังนั้นมันควรจะเร็ว แต่ฉันตัดสินใจทดสอบกับมัน
SELECT COUNT(*) FROM table
เพื่อดูว่ามีความแตกต่างด้านประสิทธิภาพมากน้อยเพียงใด
น่าเสียดายที่ฉันได้รับคำตอบต่าง ๆดังที่แสดงด้านล่าง:
คำถาม
ทำไมคำตอบต่างกันประมาณ 2 ล้านแถว? ฉันเดาว่าการค้นหาที่ดำเนินการสแกนเต็มตารางนั้นเป็นจำนวนที่แม่นยำกว่า แต่มีวิธีที่ฉันสามารถรับหมายเลขที่ถูกต้องได้โดยไม่ต้องเรียกใช้แบบสอบถามที่ช้านี้หรือไม่
ฉันวิ่งANALYZE TABLE data_302
ซึ่งเสร็จสมบูรณ์ภายใน 0.05 วินาที เมื่อฉันเรียกใช้แบบสอบถามอีกครั้งตอนนี้ฉันได้รับผลลัพธ์ที่ใกล้เคียงกับ 34384599 แถว แต่ก็ยังไม่เหมือนกันselect count(*)
กับ 34906061 แถว วิเคราะห์ตารางที่ส่งคืนทันทีและดำเนินการในพื้นหลังหรือไม่ ฉันรู้สึกว่ามันคุ้มค่าที่จะกล่าวถึงนี่คือฐานข้อมูลทดสอบและไม่ได้ถูกเขียนถึงในขณะนี้
ไม่มีใครสนใจถ้าเป็นเพียงการบอกใครสักคนว่าตารางใหญ่แค่ไหน แต่ฉันต้องการส่งจำนวนแถวไปยังโค้ดที่จะใช้ตัวเลขนั้นเพื่อสร้างคิวรีแบบอะซิงโครนัส "ขนาดเท่ากัน" เพื่อสืบค้นฐานข้อมูล ในแบบคู่ขนานคล้ายกับวิธีการที่แสดงในการเพิ่มประสิทธิภาพการสืบค้นช้าด้วยการดำเนินการแบบสอบถามแบบขนานโดย Alexander Rubin ตามที่เป็นอยู่ฉันจะได้รับไอดีสูงสุดด้วยSELECT id from table_name order by id DESC limit 1
และหวังว่าตารางของฉันจะไม่แยกส่วนเกินไป
NUM_ROWS
โคลั่ม