SQL Server - เมื่อใดควรใช้ Clustered เทียบกับ Non-Clustered Index?


99

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

ตัวอย่างเช่น: ถ้าตารางไม่มีดัชนีคลัสเตอร์ควรสร้างดัชนีที่ไม่ใช่คลัสเตอร์และประโยชน์ของการทำอะไร


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

2
ใช่คุณควรหลีกเลี่ยงดัชนีคลัสเตอร์เมื่อ; คอลัมน์นี้มีคาร์ดินาลลิตี้ต่ำไม่มีลำดับเฉพาะอัพเดตบ่อยไม่เรียงตามลำดับเป็นคอลัมน์หลายคอลัมน์ ...
TI

ขอบคุณสำหรับคำตอบ. มันมีประโยชน์
armulator

1
คำถามนี้อาจช่วยคุณได้: stackoverflow.com/questions/5070529/…
David GarcíaGonzález

คำตอบ:


118

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

เป็นโครงสร้างข้อมูลที่จำลองแบบมากที่สุดในฐานข้อมูล SQL Server ของคุณ คีย์การจัดกลุ่มจะเป็นส่วนหนึ่งของแต่ละดัชนีที่ไม่ใช่คลัสเตอร์บนโต๊ะของคุณด้วย

คุณควรใช้ความระมัดระวังอย่างยิ่งเมื่อเลือกคีย์การจัดกลุ่ม - ควรเป็น:

  • แคบ (4 ไบต์ในอุดมคติ)

  • ไม่ซ้ำกัน (เป็น "ตัวชี้แถว" หลังจากทั้งหมดหากคุณไม่ทำให้ SQL Server ไม่ซ้ำกันจะดำเนินการให้คุณในพื้นหลังโดยจะเสียค่าใช้จ่ายสองสามไบต์สำหรับแต่ละครั้งที่ป้อนจำนวนแถวและจำนวนดัชนีที่ไม่เป็นคลัสเตอร์ คุณมี - อาจมีราคาแพงมาก!)

  • คงที่ (ไม่เคยเปลี่ยนแปลง - ถ้าเป็นไปได้)

  • เพิ่มขึ้นเรื่อยๆ ในอุดมคติดังนั้นคุณจะไม่ต้องลงเอยด้วยการกระจายตัวของดัชนีที่น่ากลัว (GUID เป็นสิ่งที่ตรงกันข้ามกับคีย์การจัดกลุ่มที่ดี - ด้วยเหตุผลเฉพาะนั้น)

  • ควรเป็นค่าที่ไม่เป็นโมฆะและยังคงความกว้างคงที่ - a varchar(250)ทำให้คีย์การทำคลัสเตอร์แย่มาก

สิ่งอื่นใดควรมีความสำคัญระดับที่สองและสามที่อยู่เบื้องหลังจุดเหล่านี้ ....

ดูบล็อกโพสต์ของ Kimberly Tripp ( The Queen of Indexing ) ในหัวข้อนี้ - ทุกสิ่งที่เธอเขียนไว้ในบล็อกของเธอนั้นมีค่าอย่างยิ่ง - อ่านแยกย่อย - ใช้ชีวิตตามมัน!


1
ขอบคุณ marc_s สำหรับคำอธิบายที่ชัดเจน แต่ในทางเทคนิคnon clusteredดัชนีทำอะไรให้เรา มีความสำคัญอย่างไร .. ?
hud

@nad: ดัชนีที่ไม่ใช่คลัสเตอร์ที่ได้รับการคัดเลือกมาเป็นอย่างดีสามารถเร่งความเร็วในการค้นหาของคุณ - แทนที่จะต้องเปรียบเทียบข้อมูลหลายล้านแถวกับเกณฑ์การค้นหาของคุณคุณสามารถค้นหาแถวที่ระบุได้ด้วยการเปรียบเทียบเพียง 4, 5 ครั้ง ที่สร้างความแตกต่างอย่างมาก !
marc_s

1
@MuriloKunze: อ่านบล็อกโพสต์ของ Kim Tripp ในหัวข้อนี้เธออธิบายอย่างละเอียดว่าทำไมถึงเป็นเช่นนั้น
marc_s

5
ฉันขอโทษ แต่คำตอบสำหรับคำถาม "SQL Server - เมื่อใดควรใช้ Clustered vs non-Clustered Index" เหรอ?
Eduard
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.