มีวิธีที่ฉันสามารถหาวิธีที่ดีที่สุดที่จะรู้ว่าดัชนีที่จะสร้างสำหรับตารางหรือไม่?
WHERE
คำสั่ง
มีวิธีที่ฉันสามารถหาวิธีที่ดีที่สุดที่จะรู้ว่าดัชนีที่จะสร้างสำหรับตารางหรือไม่?
WHERE
คำสั่ง
คำตอบ:
กฎย่อของหัวแม่มือ (บางส่วนของเหล่านี้จะถูกสร้างขึ้นโดยอัตโนมัติ แต่อาจจะสามารถลดลงได้ด้วยตนเองต่อมาขึ้นอยู่กับ DBMS ของคุณ. อย่าคิดว่าคุณจะเสมอทำงานใน PostgreSQL.)
ทุกคีย์หลักหมายความว่าคีย์หลักหลายคอลัมน์ควรมีดัชนีเดี่ยวครอบคลุมคอลัมน์ทั้งหมด PostgreSQL จะสร้างดัชนีนี้โดยอัตโนมัติหากคุณประกาศคีย์หลักแบบหลายคอลัมน์
มีหลายกรณีที่ดัชนีหลายคอลัมน์เดียวให้ประสิทธิภาพที่ดีกว่าดัชนีคอลัมน์เดี่ยวหลายรายการ ตรวจสอบคำสั่งที่ช้าและทำการทดสอบเพื่อหาว่าอันไหน
สมมติว่าการเปลี่ยนแปลงใด ๆ กับการจัดทำดัชนีจะปรับปรุงกิจกรรมฐานข้อมูลบางอย่างและลดขั้นตอนอื่น ๆ ฉันพบว่ามีประโยชน์ในการมีชุดคำสั่ง SQL ที่ฉันสามารถโพรไฟล์ก่อนและหลังการเปลี่ยนแปลงดัชนี ชุดนี้ประกอบด้วยคำสั่ง SELECT, INSERT, UPDATE และ DELETE
ไม่มีสิ่งใดทดแทนการศึกษาเอกสารสำหรับ dbms เฉพาะของคุณ
นอกจากสิ่งที่@Catcall ได้จัดเตรียมไว้แล้วและเพื่อเพิ่มการแก้ไขเล็กน้อย:
ฉันยังครอบคลุมพื้นฐานบางอย่างในคำตอบที่เกี่ยวข้องอย่างใกล้ชิดเกี่ยวกับเรื่องนี้ดังนั้นเมื่อเร็ว ๆ นี้
คำตอบจนถึงตอนนี้ดูเหมือนจะบ่งบอกว่าคุณต้องสร้างดัชนีในคีย์หลัก แต่นั่นไม่ใช่กรณีใน PostgreSQL (มีข้อยกเว้นบางส่วน) ฉันพูดคู่มือที่นี่ :
PostgreSQL สร้างดัชนีที่ไม่ซ้ำกันโดยอัตโนมัติเมื่อมีการกำหนดข้อ จำกัด หรือคีย์หลักเฉพาะสำหรับตาราง ดัชนีครอบคลุมคอลัมน์ที่ทำขึ้นคีย์หลักหรือข้อ จำกัด ที่ไม่ซ้ำกัน (ดัชนีหลายคอลัมน์ถ้าเหมาะสม) และเป็นกลไกที่บังคับใช้ข้อ จำกัด
ฉันเน้นตัวหนา
คุณอาจต้องการสร้างดัชนีเพิ่มเติมสำหรับคอลัมน์ที่สองหรือใหม่กว่าของดัชนีหลายคอลัมน์ แต่โดยทั่วไปดัชนีแรกจะครอบคลุมได้ดีโดยดัชนีหลายคอลัมน์ - ยกเว้นเมื่อคอลัมน์เพิ่มเติมทำให้ดัชนีมีขนาดใหญ่กว่ามาก เราพูดคุยกันอย่างละเอียดภายใต้คำถามที่เกี่ยวข้อง
ดัชนีคอมโพสิตยังดีสำหรับการค้นหาในเขตข้อมูลแรกหรือไม่
ดัชนีหลายคอลัมน์ , ดัชนีบางส่วนและดัชนีในการแสดงออกเป็นเครื่องมือที่มีประสิทธิภาพโดยเฉพาะอย่างยิ่งใน PostgreSQL เนื่องจาก PostgreSQL 9.2 ยังมีการสแกนดัชนีเท่านั้นจึงเท่ากับ "การครอบคลุมดัชนี" ใน RDBMS อื่น นี่ไม่ใช่ดัชนีประเภทอื่น แต่เป็นความสามารถใหม่ของ RDBMS ที่มีประเภทดัชนีที่มีอยู่
ทุกดัชนีมีค่าใช้จ่ายเฉพาะดังนั้นจึงไม่มีหนทางรอบความรู้พื้นฐานในการเพิ่มประสิทธิภาพการทำดัชนีจริงๆ เพียงแค่การสร้างดัชนีมากขึ้นก็สามารถทำอันตรายได้มากกว่าดี โดยเฉพาะอย่างยิ่งดัชนีสามารถป้องกันการอัปเดต HOTจากการปรับปรุงประสิทธิภาพ
โดยทั่วไปการดำเนินการเขียน ( DELETE
, UPDATE
) มีราคาแพงกว่า (แต่อาจได้รับประโยชน์ด้วย!) ในขณะที่การอ่าน ( SELECT
) มักจะได้รับประโยชน์ ดัชนีมากเกินไปสามารถทำให้หน่วยความจำแคชหมดเพื่อให้แม้การดำเนินการอ่านอาจประสบ
สุดท้ายนี้หน้า Postgres Wiki เกี่ยวกับเครื่องมือบำรุงรักษาดัชนีจะค้นหาดัชนีที่ซ้ำกันหรือไม่ได้ใช้ (เหนือสิ่งอื่นใด)
มีสองตัวเลือก
คำตอบสำหรับการทำมันด้วยตัวคุณเองนั้นเป็นเอกสารอย่างละเอียดที่นี่ ลองดูที่อย่างอื่นดู
Pgheroอาจช่วยเหลือคุณได้หากคุณต้องการคำแนะนำอัตโนมัติ
ที่กล่าวว่ามีข้อบกพร่องบางอย่าง
WHERE
และไม่มีORDER BY
JOINS