เทคนิคการนับจำนวน record ของข้อมูลด้วย sql
<?php
$sql = mysql_query("SELECT * FROM table_name");
$records = mysql_num_rows($sql);
?>
วิธีแรกเป็นการ query เอาข้อมูลทั้งหมดออกมาจากฐานข้อมูลครับ วิธีนี้ทำงานได้ดีกับฐานข้อมูลขนาดเล็กทั่วๆไป รวมถึงฐานข้อมูลแบบ InnoDB และเหมาะสมที่สุดหากต้องการนำข้อมูลที่ได้ไปใช้งานต่อทันที นอกจากทำการนับจำนวนข้อมูล เนื่องจาก MySQL จะทำการ query ข้อมูลทั้งหมดออกมาจากฐานข้อมูลในคราวเดียว
<?php
$sql = mysql_query("SELECT COUNT(*) FROM table_name");
$res = mysql_fetch_array($sql);
$records = $res[0];
?>
วิธีนี้เหมาะสมกับการนับจำนวนข้อมูลเพียงอย่างเดียวเช่นการนับจำนวนข้อมูลทั้งหมดเพื่อแบ่งหน้า ซึ่งจะต้องไป query เอาข้อมูลจริงๆออกมาใช้งานอีกครั้งหนึ่ง ซึ่งเหมาะสมหากฐานข้อมูลที่ใช้งานมีขนาดใหญ่
ผมยกตัวอย่างการใช้งานเช่น วิธีแรก การนับจำนวน record เพียงอย่างเดียวจะได้ข้อมูลออกมาทั้งฐานข้อมุล ซึ่งถ้าไม่ได้ใช้ประโยชน์อะไรกับข้อมูลที่ได้ (หรือใช้งานแค่เพียงบางส่วน เช่นการแบ่งหน้า ที่ต้องนับจำนวน record ทั้งหมด แต่ต้องการแสดงผลแค่ไม่กี่รายการ) วิธีแรกจะไม่เหมาะสม เนื่องจากระบบจะต้องใช้หน่วยความจำจำนวนมหาศาลกับข้อมูลทั้งหมด ในขณะที่วิธีที่ 2 ใช้หน่วยความจำเพียงเล็กน้อยเท่านั้น
แต่วิธีที่ 2 ก็ไม่เหมาะกับการใช้งานกับฐานข้อมูลชนิด InnoDB ครับ เนื่องจาก InnoDB ถูกออกแบบมาสำหรับการเขียนมากกว่าการอ่านทำให้การนับจำนวน record บน InnoDB ทำได้เชื่องช้ากว่า MyISAM ซึ่งในกรณีของ InnoDB เขาแนะนำให้ใช้แบบแรกครับ แต่ก็มีคำแนะนำเล็กๆน้อยๆหากไม่ต้องการให้เปลืองทรัพยาการมากนัก เราอาจเขียนคำสั่งเลือกเพียงบาง field ออกมาก็ได้ครับ
<?php
$sql = mysql_query("SELECT id FROM table_name");
$records = mysql_num_rows($sql);
?>
วิธีด้านบนก็จะช่วยให้การทำงานกับ InnoDB เร็วขึ้น
<?php
$sql = mysql_query("SHOW TABLE STATUS LIKE 'table_name'");
$res = mysql_fetch_assoc($sql);
$records = $res['Rows'];
?>
วิธีที่ 3 วิธีสุดท้าย (ที่คิดออก) เป็นการนับจำนวน record ทั้งหมดจาก information_schema ของฐานข้อมูลโดยตรง ซึ่งจะทำให้ได้ความเร็วในการเรียกข้อมูลสูงสุด แต่ก็มีข้อเสียที่สำคัญคือไม่สามารถใช้ร่วมกับเงื่อนไขได้ครับ เป็นการอ่านจำนวน record ที่บันทึกไว้ของฐานข้อมูลเพียงอย่างเดียว