มีประโยชน์ใดบ้างในการเรียงลำดับคอลัมน์เมื่อกำหนดดัชนี


13

ตัวอย่างเช่นถ้าฉันมีสองดัชนี:

CREATE INDEX IDX_1 ON MY_TABLE_1
 (ITEM, DATE, LOCATION)
 COMPUTE STATISTICS;

CREATE INDEX IDX_2 ON MY_TABLE_1
 (DATE, LOCATION, ITEM)
 COMPUTE STATISTICS;

สิ่งนี้จะทำให้IDX_2ซ้ำซ้อนหรือไม่ ถ้าไม่ฉันจะกำหนดลำดับของการประกาศคอลัมน์ได้อย่างไร

ฉันควรปรับดัชนีให้เหมาะกับข้อความค้นหาทั่วไปหรือไม่

คำตอบ:


12

ใช่ประโยชน์เกิดขึ้นเมื่อคุณต้องการค้นหาในส่วนของดัชนี หากคุณใส่เพรดิเคตที่ใช้ชิ้นส่วนก่อนดัชนีสามารถใช้สำหรับเคียวรีที่เกี่ยวข้องกับเพรดิเคตเหล่านั้น แต่ไม่ใช่คอลัมน์ทั้งหมดในดัชนี

นอกจากนี้หากคุณมีข้อกำหนดอื่น ๆ ก็สามารถช่วยให้วางภาคแสดงที่เลือกมากที่สุดเป็นอันดับแรกเนื่องจากจะสามารถลดการค้นหาดัชนีได้เร็วขึ้น

ในกรณีของคุณIDX_2ไม่จำเป็นต้องซ้ำซ้อนขึ้นอยู่กับลักษณะของแบบสอบถามในตาราง อย่างไรก็ตามอาจไม่จำเป็นต้องรวมคอลัมน์ทั้งหมด ตัวอย่างเช่นถ้าคุณทำแบบสอบถามจำนวนมากโดยlocationและdateจากนั้นIDX_2อาจเป็นประโยชน์ในการช่วยแก้ไขแบบสอบถามเหล่านั้นตามที่IDX_1ไม่อยู่ในลำดับที่ถูกต้องที่จะเป็นประโยชน์สำหรับการที่ คุณอาจอย่างไรก็ตามพบว่าซ้ำซ้อนบนitemIDX_2

จาก 9i, Oracle แนะนำตัวดำเนินการ'สแกนข้าม'ซึ่งสามารถสืบค้นคอลัมน์ดัชนีต่อท้ายได้อย่างมีประสิทธิภาพมากขึ้นซึ่งสามารถลดความต้องการดัชนีเสริมของการจัดเรียงนี้

ในกรณีที่เฉพาะเจาะจงมากขึ้นหากคุณทำการสืบค้นitemด้วยlocationและdateไม่ต้องการคอลัมน์อื่น ๆ การสืบค้นสามารถแก้ไขได้อย่างสมบูรณ์แม้ว่าดัชนีโดยไม่ต้องอ่านอะไรจากตาราง คุณยังสามารถสร้างดัชนีครอบคลุมซึ่งมีคอลัมน์ที่ไม่ได้จัดทำดัชนีไว้ หากคอลัมน์ที่ต้องการทั้งหมดสามารถแก้ไขได้จากดัชนีครอบคลุมแบบสอบถามไม่จำเป็นต้องแตะที่ตารางหลักเลย

สุดท้ายเพื่อตอบคำถามสุดท้ายของคุณ: หากคุณมีชุดคำถามที่ใช้เป็นประจำซึ่งใช้ทรัพยากรจำนวนมากและสามารถปรับแต่งโดยใช้ดัชนีคุณควรพิจารณาอย่างรอบคอบ อย่างไรก็ตามการบำรุงรักษาดัชนีมาพร้อมกับค่าใช้จ่ายในการแทรกดังนั้นคุณจะต้องแลกเปลี่ยนประสิทธิภาพการค้นหาออกเทียบกับค่าใช้จ่ายที่ดัชนีวางบนแทรกหรือปรับปรุงการดำเนินงาน


3
@ConcernedOfTunbridgeWells: วิธีการทางเลือกคือการใช้การบีบอัดคีย์ดัชนีและมีคอลัมน์นำที่เลือกน้อยลง ช่วยนำไปสู่ดัชนีที่เล็กลงในขณะที่ยังยอมให้การสแกนข้ามทำงานได้ดี
Adam Musch

2

สิ่งที่ต้องคำนึงถึงอีกประการหนึ่งคือคอลัมน์ที่มีค่า Null จำนวนมาก

หากคอลัมน์เหล่านี้มีคอลัมน์ใด ๆ ที่ระบุไว้หลังจากนั้นในดัชนีค่า Null จะต้องถูกทำดัชนี มิฉะนั้นตามปกติแล้วค่า Null จะไม่ถูกจัดทำดัชนี (แน่นอนว่านี่เป็นการสมมติว่าคุณกำลังใช้ดัชนีต้นไม้แบบต้นไม้)

ดังนั้นหากคุณมีคอลัมน์ที่มีค่า Null จำนวนมากการวางไว้ที่ส่วนท้ายของดัชนีจะช่วยให้คุณประหยัดพื้นที่ดิสก์ได้มาก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.