การทำ 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

วิธีการ Import ฐานข้อมูลขนาดใหญ่ด้วย BigDump

หากท่านกำลังประสพปัญหามีไฟล์ฐานข้อมูลขนาดใหญ่ขนาดหลายร้อย Megabyte ไม่สามารถ Import...

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

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

วิธี Import และ Export Database ผ่าน ssh

หากคุณมีฐานข้อมูลขนาดใหญ่มากจนไม่สามารถ Import และ Export Database ผ่าน phpmyadmin ได้ การเลือก...

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

คุณสามารถลบฐานข้อมูลเพื่อใช้งานได้ผ่านทาง DirectAdmin Control Panel โดยคุณต้องทำการ Login...

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

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