การทำ Index Database เพื่อเพิ่มประสิทธิภาพ และความเร็วของฐานข้อมูล

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

สมมุติว่าเรามี Index 1-100 ถ้าเราต้องการหาข้อมูล ที่ 88 กระบวนการจะไม่ได้เริ่มค้นหาตั้งแต่ 1 แต่จะเข้าไปถึงข้อมูลที่ 88 เลยและจะหยุดทำงานทันทีที่เจอ

ยกตัวอย่างการเพิ่มความเร็วในการค้นหาข้อมูลจากฐานข้อมูล MySQL เพียงแค่พิมพ์คำสั่งเดียวเท่านั้น เพื่อสร้าง index ของฟิลด์ที่ใช้ในการค้นหา

คำเตือน! ควรจำลองฐานข้อมูลออกมาอีก 1 ชุดเพื่อทดลองก่อนทำกับฐานข้อมูลจริงที่ใช้งาน เพื่อทดสอบประสิทธิ์ภาพ

ฐานข้อมูลจำลอง ที่เราจะทดลองปรับปรุงเป็นตัวอย่าง ใช้เก็บข้อมูลสินค้าของบริษัท ปัญหาที่พบคือเวลาค้นหาชื่อสินค้าโดยพิมพ์ชื่อแล้วกดค้นหา ต้องรอสักพักกว่าจะขึ้น ทั้งๆ ที่มีจำนวน record ประมาณ 60,000 แถว เท่านั้น เมื่อตรวจสอบรายละเอียดของ table แล้ว จะเป็นประมาณนี้

CREATE TABLE `items` (
`item_id` int(10) unsigned NOT NULL auto_increment,
`item_name` varchar(255) default NULL,
`item_descr` varchar(255) default NULL,
`item_barcode` varchar(255) default NULL,
`item_total` int(11) default '0',
`item_status` char(1) default NULL,
PRIMARY KEY (`item_id`)
);


เมื่อทดสอบการค้นหาข้อมูล โดยใช้คำสั่ง SELECT จะได้ผลลัพธ์ดังนี้

mysql> SELECT item_id,item_name FROM items WHERE item_name='PNGS932A-31';
+---------+----------------------+
| item_id | item_name |
+---------+----------------------+
| 22434 | PNGS932A-31 |
+---------+----------------------+
1 row in set (0.17 sec)

จากตัวอย่าง ใช้เวลาในการค้นหา 0.17 วินาที

เพื่อเพิ่มความเร็วในการค้นหาฟิลด์ที่ใช้งานบ่อยๆ แนะนำให้ทำ index หรือ key กับฟิลด์นั้นๆ วิธีการคือใช้คำสั่ง ALTER TABLE ตามตัวอย่างดังนี้

mysql> ALTER TABLE items ADD KEY (item_name);
Query OK, 57625 rows affected (1.34 sec)
Records: 57625 Duplicates: 0 Warnings: 0

แล้วทดลองค้นหาโดยใช้คำสั่ง SELECT อีกครั้งหนึ่ง เพื่อเปรียบเทียบ

mysql> SELECT item_id,item_name FROM items WHERE item_name='PNGS932A-31';
+---------+----------------------+
| item_id | item_name |
+---------+----------------------+
| 22434 | PNGS932A-31 |
+---------+----------------------+
1 row in set (0.01 sec)

ผลลัพธ์ที่ได้ จะใช้เวลาแค่ 0.01 วินาที เท่านั้น ซึ่งเร็วกว่ามาก เมื่อเปรียบเทียบกับการไม่สร้าง index

ทดสอบเอา index ออกอีกครั้ง แล้วทดสอบ SELECT อีกที ผลลัพธ์จะกลับมาช้าเหมือนเดิม

ตัวอย่างการเอา index ออกจากฟิลด์ item_name

mysql> ALTER TABLE items DROP KEY item_descr;
Query OK, 57625 rows affected (0.70 sec)
Records: 57625 Duplicates: 0 Warnings: 0
mysql> SELECT item_id,item_name FROM items WHERE item_name='PNGS932A-31';
+---------+----------------------+
| item_id | item_name |
+---------+----------------------+
| 22434 | PNGS932A-31 |
+---------+----------------------+
1 row in set (0.17 sec)

คำแนะนำ
ควรทำ index กับฟิลด์ที่ใช้ค้นหาบ่อยๆ หรือใช้เป็นเงื่อนไขการ JOIN TABLE
ไม่จำเป็นเสมอไป หลังจากทำ index แล้วจะเร็วขึ้น ขึ้นอยู่กับการออกแบบฐานข้อมูลและคำสั่งที่ใช้ค้นหาด้วย
การทำ Index ทำให้สิ้นเปลืองเนื้อที่ กับ ทำให้ Opretion Insert, Update, Delete ทำงานช้าลงเล็กน้อย

Was this answer helpful?

 Print this Article

Also Read

วิธีการเพิ่มประสิทธิภาพให้กับฐานข้อมูล

ฐานข้อมูลที่มีการใช้งานมากๆ อาจจะมีอาการอ่านข้อมูลช้าบ้าง เข้าถึงข้อมูลได้บ้างไม่ได้บ้าง...

ขั้นตอนการอนุญาติให้เชื่อมต่อฐานข้อมูลจากภายนอกได้

เนื่องจากเรามีการบล็อคการเชื่อมต่อที่เข้าถึงฐานข้อมูลจากภายนอก...

วิธีการตรวจสอบฐานข้อมูล

บางครั้งฐานข้อมูลที่มีการใช้งานมาก และมีขนาดใหญ่ก็อาจบันทึกข้อมูลเลือนตาราง ตาารางฐานข้อมูลล็อค...

วิธีการซ่อมแซมฐานข้อมูลผ่านทาง phpMyAdmin

บางครั้งฐานข้อมูลที่มีการใช้งานมาก และมีขนาดใหญ่ก็อาจบันทึกข้อมูลเลื่อนตาราง ตารางฐานข้อมูลล็อค...

วิธีการซ่อมแซมฐานข้อมูล

บางครั้งฐานข้อมูลที่มีการใช้งานมาก และมีขนาดใหญ่ก็อาจบันทึกข้อมูลเลือนตาราง ตาารางฐานข้อมูลล็อค...