ดัชนีแบบคลัสเตอร์คืออะไร


15

ฉันต้องการคำอธิบายสั้น ๆ ของดัชนีคลัสเตอร์

  • ดัชนีคลัสเตอร์คืออะไร
  • แนวปฏิบัติที่เหมาะสมที่สุดสำหรับการใช้ดัชนีคลัสเตอร์คืออะไร

เป็นความคิดที่ดีที่จะใช้วันที่ในดัชนีแบบกลุ่มเนื่องจากข้อมูลใหม่จะถูกผนวกเข้ากับท้ายตารางเสมอ
Ralph Winters

1
อาจเป็นไปได้ แต่ไม่เสมอไป
mrdenny

@ mrdenny - คุณช่วยอธิบายได้ไหมว่าเมื่อไหร่จะไม่เป็นเช่นนั้น?
Ralph Winters

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

@mrdenny: ถ้าตารางมีคอลัมน์ไม่มีวัน (กรณีย่อยของคนสุดท้ายของคุณ :)
ypercubeᵀᴹ

คำตอบ:


15

ในแง่ง่าย ๆ ...

สมุดโทรศัพท์: ข้อมูลคือดัชนี / ดัชนีคือข้อมูล เพื่อค้นหาคุณฉันจะเริ่มด้วย Rezaei, Amir ไม่จำเป็นต้องค้นหาภายนอก

ในแง่ของฐานข้อมูล:

ข้อมูลตารางและดัชนีคลัสเตอร์เป็นหนึ่งเดียวกัน (ใน SQL Server ยัง InnoDB, Oracle IOT)

แนวปฏิบัติที่ดีที่สุดคือแคบตัวเลขเพิ่มขึ้นอย่างเข้มงวด (คิดว่าตัวตนหรือคอลัมน์ Autonumber) ชนิดข้อมูลเช่น GUID ไม่ใช่ความคิดที่ดี

ลิงก์เพื่ออ่าน (เพื่อหลีกเลี่ยงการ bloating คำตอบนี้)

แก้ไขเพื่ออธิบายข้อเสนอแนะการปฏิบัติที่ดีที่สุดของฉันอย่างสมบูรณ์ไปตามลิงก์ในความคิดเห็นของ Eric Humphrey: Queen of Indexing: Kimberly Tripp


3
คุณจะต้องการบล็อกของ Kimberly Tripp: sqlskills.com/BLOGS/KIMBERLY/category/Clustered-Index.aspx
Eric Humphrey - lotsahelp

1
และมีปัญหากับการใช้ "แนวปฏิบัติที่ดีที่สุด" โดยไม่มีบริบท ตัวอย่างเช่นหากเกณฑ์การค้นหาหลักสำหรับตารางที่มีการสืบค้นบ่อยครั้งใหญ่เป็นช่วงวันที่ตำแหน่งที่ดีที่สุดของคุณสำหรับดัชนีคลัสเตอร์คือวันที่ที่ทำการค้นหาไม่ใช่คีย์หลัก ในการบอกว่าตารางและดัชนีคลัสเตอร์เป็นหนึ่งและเหมือนกันเล็กน้อยเกินไป ข้อมูลจะถูกจัดเก็บตามคำสั่งที่กำหนดโดยดัชนีคลัสเตอร์ เหนือสิ่งอื่นใดซึ่งหมายความว่าดัชนีคลัสเตอร์มีประโยชน์อย่างยิ่งสำหรับการค้นหาช่วงที่ส่งคืนชุดข้อมูลแบบเต็ม
Russell Steen

2
@Russell Steen: 1. ฉันรวมลิงค์ไว้ 2. OP ต้องถามให้พิจารณาว่าฉันได้โพสคำตอบนี้ในระดับใด 3. Eric Eric Humphrey ได้สร้างลิงค์ เราสามารถผ่านเป็นกรณี ๆ ไปสิ่งที่พวกเรามีประสบการณ์มากขึ้นรู้และเข้าใจ แต่พวกเราอยู่ที่นี่เพื่อช่วยให้ความรู้หรือเอาชนะ ... ?
GBN

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

2
โอ้เพิ่งสังเกตเห็นSQL-Serverแท็กไม่สนใจ
ypercubeᵀᴹ

3

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

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


3
ดัชนีที่ไม่ใช่คลัสเตอร์อาจมีประสิทธิภาพสำหรับการค้นหาหากดัชนีที่ไม่ใช่คลัสเตอร์ครอบคลุมสำหรับการค้นหาที่เป็นปัญหา
รัสเซลสตี

@ รัสเซลไม่มีทางที่จะเร็วขึ้นเพราะดัชนีบังคับให้เรียงลำดับข้อมูลจริง ไม่มีวิธีที่ง่ายกว่า / เร็วกว่าสำหรับ SQL หรือ RDBMS ใด ๆ ในการค้นหาข้อมูลที่ต้องการ
kacalapy

4
ฉันไม่ได้พูดเร็วขึ้น ดัชนีครอบคลุมมีข้อมูลทั้งหมดที่ร้องขอในตัวเลือกในดัชนี - IN ORDER ในตำแหน่งแยกต่างหากบนดิสก์ ดังนั้นการเลือกเทียบกับดัชนีการครอบคลุมที่ตรงกันจะไม่กระทบกับตาราง
Russell Steen

2
NCI ที่ครอบคลุมจะมีขนาดเล็กลงซึ่งหมายถึงการอ่านและอ่านได้เร็วขึ้น
Martin Smith

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