การเพิ่มประสิทธิภาพการใช้คำสั่ง SQL ใน PHP
การดำเนินการคำสั่ง SQL ไปยังฐานข้อมูลเป็น การดำเนินการที่ช้ามาก ดังนั้นจึงจำเป็นต้อง พยายามลดจำนวนคำสั่งที่ส่งไปยังฐานข้อมูล ให้น้อยที่สุด
ข้อผิดพลาดที่พบได้บ่อยที่สุดคือการดำเนินการ คำสั่ง SQL จำนวนมากในลูป ในขณะที่ มีคำสั่งทางเลือกซึ่งช่วยให้ สามารถทำสิ่งที่ต้องการด้วยคำสั่งเดียวได้
เรามาดูตัวอย่างกัน
สมมติว่าเรามีอาร์เรย์ที่มี id ของเร็กคอร์ด
ในฐานข้อมูล และเราต้องการลบเร็กคอร์ด
ที่มี id ดังกล่าว
โดยไม่คิดมาก เราสามารถเขียนโครงสร้าง ที่ "วิเศษ" แบบนี้ได้:
<?php
$ids = [1, 2, 3, 4, 5]; // อาร์เรย์สำหรับการลบ
foreach ($ids as $id) {
mysqli_query($link, "DELETE FROM users WHERE id=$id");
}
?>
ปัญหาของโค้ดนี้คือมีการดำเนินการ
คำสั่งจำนวนมากในลูป ลองนึกภาพว่า
ในอาร์เรย์จะมี 100 องค์ประกอบ - จะมีการดำเนินการ
คำสั่งถึง 100 ครั้งไปยังฐานข้อมูล!
กับดักพิเศษของงานที่อธิบายไว้คือ ในระหว่างการพัฒนาเว็บไซต์ ฐานข้อมูลมีขนาดเล็ก และคำสั่งต่างๆ จะทำงานได้อย่างรวดเร็วมาก อย่างไรก็ตาม เมื่อเว็บไซต์ทำงานบนโฮสติ้ง ฐานข้อมูลจะ เติบโตขึ้น คำสั่งต่างๆ จะทำงานช้าลงเรื่อยๆ และอาจถึงจุดที่เนื่องจากการดำเนินการ คำสั่งเป็นร้อยๆ ครั้งในลูป เว็บไซต์อาจโหลด นานกว่าหนึ่งนาที!
ด้วยความพยายามเพียงเล็กน้อย เราสามารถทำให้ มีการดำเนินการเพียงคำสั่งเดียวได้ ดังนี้:
<?php
$ids = [1, 2, 3, 4, 5];
$str = implode(',', $ids); // จะได้สตริง '1,2,3,4,5'
mysqli_query($link, "DELETE FROM users WHERE id IN ($str)");
?>
เพิ่มประสิทธิภาพโค้ดด้านล่างนี้:
<?php
$arr = [1, 2, 2, 4, 5];
$res = [];
for ($i = 1; $i < count($arr); $i++) {
$note = mysqli_query($link, "SELECT * FROM users WHERE id=$id");
for ($data = []; $row = mysqli_fetch_assoc($note); $data[] = $row);
$res[] = $data;
}
var_dump($res);
?>