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

Related Articles