PostgreSQL - ดัชนี
ดัชนีคือตารางการค้นหาพิเศษที่เครื่องมือค้นหาฐานข้อมูลสามารถใช้เพื่อเร่งความเร็วในการดึงข้อมูล พูดง่ายๆคือดัชนีเป็นตัวชี้ไปยังข้อมูลในตาราง ดัชนีในฐานข้อมูลคล้ายกับดัชนีที่อยู่ด้านหลังของหนังสือ
ตัวอย่างเช่นหากคุณต้องการอ้างอิงทุกหน้าในหนังสือที่กล่าวถึงหัวข้อใดหัวข้อหนึ่งก่อนอื่นคุณต้องอ้างถึงดัชนีซึ่งแสดงรายการหัวข้อทั้งหมดตามลำดับตัวอักษรจากนั้นอ้างถึงหมายเลขหน้าหนึ่งหรือหลายหน้า
ดัชนีช่วยเร่งความเร็วในการสืบค้น SELECT และ WHERE clauses; อย่างไรก็ตามมันทำให้การป้อนข้อมูลช้าลงด้วยคำสั่ง UPDATE และ INSERT ดัชนีสามารถสร้างหรือลดลงได้โดยไม่มีผลกระทบต่อข้อมูล
การสร้างดัชนีเกี่ยวข้องกับคำสั่ง CREATE INDEX ซึ่งช่วยให้คุณสามารถตั้งชื่อดัชนีเพื่อระบุตารางและคอลัมน์หรือคอลัมน์ใดที่จะจัดทำดัชนีและเพื่อระบุว่าดัชนีอยู่ในลำดับจากน้อยไปมากหรือมากไปน้อย
ดัชนีสามารถไม่ซ้ำกันได้เช่นเดียวกับข้อ จำกัด UNIQUE เนื่องจากดัชนีป้องกันรายการที่ซ้ำกันในคอลัมน์หรือการรวมกันของคอลัมน์ที่มีดัชนี
คำสั่ง CREATE INDEX
ไวยากรณ์พื้นฐานของ CREATE INDEX มีดังนี้ -
CREATE INDEX index_name ON table_name;
ประเภทดัชนี
PostgreSQL มีดัชนีหลายประเภท: B-tree, Hash, GiST, SP-GiST และ GIN ดัชนีแต่ละประเภทใช้อัลกอริทึมที่แตกต่างกันซึ่งเหมาะที่สุดสำหรับการสืบค้นประเภทต่างๆ ตามค่าเริ่มต้นคำสั่ง CREATE INDEX จะสร้างดัชนี B-tree ซึ่งเหมาะกับสถานการณ์ที่พบบ่อยที่สุด
ดัชนีคอลัมน์เดียว
ดัชนีคอลัมน์เดียวคือดัชนีที่สร้างขึ้นจากคอลัมน์ในตารางเดียวเท่านั้น ไวยากรณ์พื้นฐานมีดังนี้ -
CREATE INDEX index_name
ON table_name (column_name);
ดัชนีหลายคอลัมน์
ดัชนีหลายคอลัมน์ถูกกำหนดไว้ในคอลัมน์มากกว่าหนึ่งคอลัมน์ของตาราง ไวยากรณ์พื้นฐานมีดังนี้ -
CREATE INDEX index_name
ON table_name (column1_name, column2_name);
ไม่ว่าจะสร้างดัชนีคอลัมน์เดียวหรือดัชนีหลายคอลัมน์ให้พิจารณาคอลัมน์ที่คุณอาจใช้บ่อยมากในส่วนคำสั่ง WHERE ของคิวรีเป็นเงื่อนไขตัวกรอง
หากมีเพียงคอลัมน์เดียวที่ใช้ดัชนีคอลัมน์เดียวควรเป็นตัวเลือก หากมีคอลัมน์สองคอลัมน์ขึ้นไปที่ใช้บ่อยในส่วนคำสั่ง WHERE เป็นตัวกรองดัชนีหลายคอลัมน์จะเป็นตัวเลือกที่ดีที่สุด
ดัชนีเฉพาะ
ดัชนีเฉพาะไม่เพียง แต่ใช้เพื่อประสิทธิภาพเท่านั้น แต่ยังใช้เพื่อความสมบูรณ์ของข้อมูลด้วย ดัชนีที่ไม่ซ้ำกันไม่อนุญาตให้แทรกค่าที่ซ้ำกันลงในตาราง ไวยากรณ์พื้นฐานมีดังนี้ -
CREATE UNIQUE INDEX index_name
on table_name (column_name);
ดัชนีบางส่วน
ดัชนีบางส่วนคือดัชนีที่สร้างขึ้นจากส่วนย่อยของตาราง ชุดย่อยถูกกำหนดโดยนิพจน์เงื่อนไข (เรียกว่าเพรดิเคตของดัชนีบางส่วน) ดัชนีประกอบด้วยรายการสำหรับแถวตารางที่ตรงตามเพรดิเคตเท่านั้น ไวยากรณ์พื้นฐานมีดังนี้ -
CREATE INDEX index_name
on table_name (conditional_expression);
ดัชนีโดยนัย
ดัชนีโดยนัยคือดัชนีที่เซิร์ฟเวอร์ฐานข้อมูลสร้างขึ้นโดยอัตโนมัติเมื่อสร้างวัตถุ ดัชนีจะถูกสร้างขึ้นโดยอัตโนมัติสำหรับข้อ จำกัด ของคีย์หลักและข้อ จำกัด เฉพาะ
ตัวอย่าง
ต่อไปนี้เป็นตัวอย่างที่เราจะสร้างดัชนีในตารางCOMPANYสำหรับคอลัมน์เงินเดือน -
# CREATE INDEX salary_index ON COMPANY (salary);
ตอนนี้ให้เราแสดงรายการดัชนีทั้งหมดที่มีอยู่ในตาราง COMPANY โดยใช้ \d company คำสั่ง
# \d company
สิ่งนี้จะให้ผลลัพธ์ต่อไปนี้โดยที่company_pkeyเป็นดัชนีโดยนัยซึ่งถูกสร้างขึ้นเมื่อสร้างตาราง
Table "public.company"
Column | Type | Modifiers
---------+---------------+-----------
id | integer | not null
name | text | not null
age | integer | not null
address | character(50) |
salary | real |
Indexes:
"company_pkey" PRIMARY KEY, btree (id)
"salary_index" btree (salary)
คุณสามารถแสดงรายการฐานข้อมูลดัชนีทั้งหมดได้โดยใช้ไฟล์ \di คำสั่ง -
คำสั่ง DROP INDEX
ดัชนีสามารถลดลงได้โดยใช้ PostgreSQL DROPคำสั่ง ควรใช้ความระมัดระวังเมื่อวางดัชนีเนื่องจากประสิทธิภาพอาจช้าลงหรือดีขึ้น
ไวยากรณ์พื้นฐานมีดังนี้ -
DROP INDEX index_name;
คุณสามารถใช้คำสั่งต่อไปนี้เพื่อลบดัชนีที่สร้างไว้ก่อนหน้านี้ -
# DROP INDEX salary_index;
เมื่อใดควรหลีกเลี่ยงดัชนี
แม้ว่าดัชนีจะมีจุดมุ่งหมายเพื่อเพิ่มประสิทธิภาพของฐานข้อมูล แต่ก็มีบางครั้งที่ควรหลีกเลี่ยง แนวทางต่อไปนี้ระบุว่าควรพิจารณาการใช้ดัชนีใหม่เมื่อใด -
ไม่ควรใช้ดัชนีบนโต๊ะขนาดเล็ก
ตารางที่มีการอัปเดตแบตช์จำนวนมากบ่อยครั้งหรือการแทรกการดำเนินการ
ไม่ควรใช้ดัชนีในคอลัมน์ที่มีค่า NULL จำนวนมาก
ไม่ควรจัดทำดัชนีคอลัมน์ที่มีการจัดการบ่อยๆ