Skip to main content

เนื้อหาภาษาไทย / Thai content

System guide Content reviewed

การปรับปรุงประสิทธิภาพของ PDO Query

บทความนี้กล่าวถึงเทคนิคการปรับปรุงประสิทธิภาพของ PDO Query เพื่อให้แอปพลิเคชันทำงานได้รวดเร็วขึ้น โดยเน้น 3 หัวข้อหลัก: การใช้ Index ในฐานข้อมูล, การหลีกเลี่ยงก...

การปรับปรุงประสิทธิภาพของ PDO Query

ในบทเรียนก่อนหน้านี้ เราได้เรียนรู้เกี่ยวกับการใช้งาน PDO ในการจัดการฐานข้อมูลอย่างปลอดภัย รวมถึงการใช้ Prepared Statements เพื่อป้องกัน SQL Injection ในบทนี้ เราจะมาเรียนรู้เทคนิคต่างๆ ที่จะช่วยปรับปรุงประสิทธิภาพของ PDO Query ให้ทำงานได้รวดเร็วและมีประสิทธิภาพมากยิ่งขึ้น การปรับปรุงประสิทธิภาพ Query เป็นสิ่งสำคัญอย่างยิ่งเมื่อฐานข้อมูลของเรามีขนาดใหญ่ขึ้น และมีผู้ใช้งานจำนวนมาก เพื่อให้แอปพลิเคชันของเราตอบสนองได้อย่างรวดเร็วและราบรื่น

หัวข้อที่เราจะครอบคลุมในบทนี้:

  • การใช้ Index ในฐานข้อมูล
  • การหลีกเลี่ยงการใช้ SELECT *
  • การใช้ Prepared Statements อย่างมีประสิทธิภาพ

1. การใช้ Index ในฐานข้อมูล

Index คือโครงสร้างข้อมูลพิเศษที่ฐานข้อมูลใช้เพื่อค้นหาข้อมูลได้อย่างรวดเร็ว คล้ายกับการมีสารบัญในหนังสือ เมื่อเราสร้าง Index บนคอลัมน์ใดคอลัมน์หนึ่ง ฐานข้อมูลจะสร้างโครงสร้างข้อมูลที่ช่วยให้สามารถค้นหาข้อมูลในคอลัมน์นั้นได้อย่างรวดเร็วโดยไม่ต้องสแกนทั้งตาราง

กรณีใช้งานจริง: สมมติว่าเรามีตาราง users ที่เก็บข้อมูลผู้ใช้งาน และเรามักจะค้นหาผู้ใช้งานด้วยอีเมล การสร้าง Index บนคอลัมน์ email จะช่วยให้การค้นหาผู้ใช้งานด้วยอีเมลทำได้รวดเร็วยิ่งขึ้น

-- สร้าง Index บนคอลัมน์ email ในตาราง users
CREATE INDEX idx_email ON users (email);

ข้อผิดพลาดที่พบบ่อย: การสร้าง Index มากเกินไปอาจทำให้ประสิทธิภาพโดยรวมลดลง เนื่องจากทุกครั้งที่มีการเพิ่ม แก้ไข หรือลบข้อมูลในตาราง ฐานข้อมูลจะต้องอัปเดต Index ด้วย ดังนั้นควรสร้าง Index เฉพาะบนคอลัมน์ที่ใช้ในการค้นหาบ่อยๆ เท่านั้น

ขั้นตอนการนำไปใช้จริง:

  1. วิเคราะห์ Query ที่ใช้บ่อยที่สุดในแอปพลิเคชันของคุณ
  2. ระบุคอลัมน์ที่ใช้ในการค้นหา (WHERE clause) หรือเรียงลำดับ (ORDER BY clause)
  3. สร้าง Index บนคอลัมน์เหล่านั้น
  4. ตรวจสอบประสิทธิภาพของ Query หลังจากสร้าง Index แล้ว

2. การหลีกเลี่ยงการใช้ SELECT *

การใช้ SELECT * คือการดึงข้อมูลทุกคอลัมน์ในตาราง ซึ่งอาจทำให้เสียเวลาและทรัพยากรโดยไม่จำเป็น หากเราต้องการใช้ข้อมูลเพียงบางคอลัมน์เท่านั้น ควรระบุคอลัมน์เหล่านั้นใน Query แทนที่จะใช้ SELECT *

กรณีใช้งานจริง: สมมติว่าเราต้องการแสดงชื่อและอีเมลของผู้ใช้งานทั้งหมด การใช้ SELECT * จะดึงข้อมูลทุกคอลัมน์ (เช่น id, password, address) ซึ่งเราไม่ได้ใช้ การใช้ SELECT name, email จะดึงข้อมูลเฉพาะคอลัมน์ที่เราต้องการเท่านั้น

-- แบบไม่ดี: ดึงข้อมูลทุกคอลัมน์
SELECT * FROM users;

-- แบบดี: ดึงข้อมูลเฉพาะคอลัมน์ที่ต้องการ
SELECT name, email FROM users;

ข้อผิดพลาดที่พบบ่อย: บางครั้งนักพัฒนาอาจใช้ SELECT * เพราะง่ายและรวดเร็ว แต่ในระยะยาวอาจส่งผลเสียต่อประสิทธิภาพของแอปพลิเคชัน โดยเฉพาะอย่างยิ่งเมื่อตารางมีจำนวนคอลัมน์มาก

ขั้นตอนการนำไปใช้จริง:

  1. ตรวจสอบ Query ที่ใช้ SELECT * ในแอปพลิเคชันของคุณ
  2. ระบุคอลัมน์ที่จำเป็นต้องใช้ในแต่ละ Query
  3. แก้ไข Query ให้ดึงข้อมูลเฉพาะคอลัมน์ที่ต้องการ
  4. ตรวจสอบประสิทธิภาพของ Query หลังจากแก้ไขแล้ว

3. การใช้ Prepared Statements อย่างมีประสิทธิภาพ

Prepared Statements ไม่เพียงแต่ช่วยป้องกัน SQL Injection เท่านั้น แต่ยังช่วยปรับปรุงประสิทธิภาพของ Query ได้อีกด้วย เมื่อเราใช้ Prepared Statements ฐานข้อมูลจะทำการคอมไพล์ Query เพียงครั้งเดียว และสามารถนำ Query ที่คอมไพล์แล้วมาใช้ซ้ำได้หลายครั้ง โดยการเปลี่ยนเฉพาะค่าพารามิเตอร์

กรณีใช้งานจริง: สมมติว่าเราต้องการเพิ่มผู้ใช้งานใหม่หลายคนลงในตาราง users การใช้ Prepared Statements จะช่วยลดเวลาในการคอมไพล์ Query แต่ละครั้ง

<?php
// เตรียม Query
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");

// เพิ่มผู้ใช้งานหลายคน
$users = [
    ['name' => 'John Doe', 'email' => 'john.doe@example.com'],
    ['name' => 'Jane Doe', 'email' => 'jane.doe@example.com'],
    ['name' => 'Peter Pan', 'email' => 'peter.pan@example.com'],
];

foreach ($users as $user) {
    // ผูกค่าพารามิเตอร์
    $stmt->bindParam(':name', $user['name']);
    $stmt->bindParam(':email', $user['email']);

    // execute the query
    $stmt->execute();
}

echo "เพิ่มผู้ใช้งานสำเร็จ";
?>

ข้อผิดพลาดที่พบบ่อย: การไม่ใช้ Prepared Statements เมื่อต้อง execute query เดิมซ้ำๆ หลายครั้งจะทำให้เสียเวลาในการ compile query ใหม่ทุกครั้ง

ขั้นตอนการนำไปใช้จริง:

  1. ระบุ Query ที่ใช้ซ้ำๆ ในแอปพลิเคชันของคุณ
  2. เปลี่ยน Query เหล่านั้นให้ใช้ Prepared Statements
  3. วัดประสิทธิภาพของ Query ก่อนและหลังการใช้ Prepared Statements เพื่อเปรียบเทียบ

สรุป

การปรับปรุงประสิทธิภาพของ PDO Query เป็นสิ่งสำคัญในการสร้างแอปพลิเคชันที่รวดเร็วและมีประสิทธิภาพ การใช้ Index, การหลีกเลี่ยง SELECT * และการใช้ Prepared Statements อย่างมีประสิทธิภาพเป็นเทคนิคพื้นฐานที่สามารถนำไปใช้ได้จริง และจะช่วยให้แอปพลิเคชันของคุณทำงานได้ดีขึ้นอย่างเห็นได้ชัด ในบทเรียนถัดไป เราจะเรียนรู้เกี่ยวกับการใช้ PDO กับ Multiple Databases เพื่อให้แอปพลิเคชันของเราสามารถทำงานร่วมกับฐานข้อมูลหลายประเภทได้อย่างง่ายดาย

Office.in.th Custom Service

Want to build or adapt a system from this structure?

Office.in.th designs and develops enterprise web applications, API integrations, and public- and private-sector management systems, with long-term support.

See our software development service