การใช้งานฐานข้อมูลที่มีข้อมูลจำนวนมาก คำสั่ง SELECT หรือ Query ที่ซับซ้อนอาจทำงานช้า เนื่องจากต้องทำการ Full Table Scan ซึ่ง PostgreSQL จึงมีเครื่องมือที่สำคัญมากในการเร่งความเร็ว Query ก็คือ Index บทความนี้จะพาคุณทำความเข้าใจ Index แต่ละประเภท ได้แก่ B-Tree, Hash, GIN และ BRIN พร้อมตัวอย่างการใช้งานจริง
Index คืออะไร?
Index ทำหน้าที่เหมือนสารบัญหนังสือ ที่ช่วยให้เราค้นหาข้อมูลได้เร็วขึ้น โดยไม่ต้องอ่านทุกหน้า (Full Scan) แต่สามารถข้ามไปยังตำแหน่งที่ต้องการได้ทันที
1. B-Tree Index
B-Tree เป็น Index มาตรฐานที่ PostgreSQL ใช้เป็น Default เหมาะสำหรับการค้นหาด้วยเงื่อนไข =
, <
, >
, BETWEEN
, และการ Sort
ตัวอย่างการสร้าง:
CREATE INDEX idx_users_name ON users(name);
ตัวอย่าง Query:
SELECT * FROM users WHERE name = 'Alice';
2. Hash Index
Hash Index เหมาะสำหรับการค้นหาค่าที่ตรงกันแบบ =
เท่านั้น แต่ไม่รองรับการค้นหาแบบ Range (<
, >
) ใช้ในกรณีที่ต้องการ Match ค่าอย่างเดียว
ตัวอย่างการสร้าง:
CREATE INDEX idx_users_email_hash ON users USING HASH(email);
ตัวอย่าง Query:
SELECT * FROM users WHERE email = '[email protected]';
3. GIN Index (Generalized Inverted Index)
GIN เหมาะกับข้อมูลที่เป็น Array, JSONB, Full-text Search ใช้เมื่อมีการค้นหาคำหรือค่าหลาย ๆ ค่าในฟิลด์เดียว
ตัวอย่างการสร้าง Index บน JSONB:
CREATE INDEX idx_users_data ON users USING GIN (data);
Query ตัวอย่าง:
SELECT * FROM users WHERE data @> '{"country": "Thailand"}';
4. BRIN Index (Block Range Index)
BRIN เหมาะกับตารางขนาดใหญ่มาก (Big Data) โดยใช้หลักการเก็บค่าสรุป (Summary) ของ Block ข้อมูล เหมาะกับคอลัมน์ที่มีค่าเรียงลำดับ เช่น วันที่, ID, เวลาบันทึก
ตัวอย่างการสร้าง:
CREATE INDEX idx_orders_date ON orders USING BRIN(order_date);
Query ตัวอย่าง:
SELECT * FROM orders WHERE order_date BETWEEN '2024-01-01' AND '2024-12-31';
เปรียบเทียบ Index ประเภทต่าง ๆ
ประเภท Index | เหมาะกับ | ข้อจำกัด |
---|---|---|
B-Tree | Query ทั่วไป, Range, Sorting | ใช้พื้นที่มากขึ้น |
Hash | การค้นหา Exact Match | ไม่รองรับ Range |
GIN | JSONB, Full-text Search, Array | Insert/Update ช้าลง |
BRIN | ตารางใหญ่, ค่าต่อเนื่อง | ไม่เหมาะกับคอลัมน์ที่กระจัดกระจาย |

การเลือกใช้ Index ให้เหมาะสม
- ใช้ B-Tree สำหรับ Query ส่วนใหญ่
- ใช้ Hash หากต้องการค้นหาค่าตรง ๆ
- ใช้ GIN สำหรับ JSON, Full-text Search
- ใช้ BRIN สำหรับ Big Data และข้อมูลเรียงตามเวลา
สรุป
Index คือเครื่องมือสำคัญที่ช่วยเร่งความเร็ว Query แต่ควรเลือกใช้ให้เหมาะกับลักษณะข้อมูลและประเภทของ Query การมี Index ที่ดีจะช่วยให้ระบบฐานข้อมูลทำงานได้รวดเร็วและมีประสิทธิภาพ
SEO Keywords
PostgreSQL Index,B-Tree Index,Hash Index,GIN Index,BRIN Index,SQL Query Optimization,เร่งความเร็ว Query,การใช้ Index PostgreSQL,Database Index