จำเป็นต้องรวมคอลัมน์ดัชนีคลัสเตอร์ในดัชนีที่ไม่ใช่คลัสเตอร์หรือไม่


15

เมื่อพิจารณาว่าดัชนีที่ไม่ได้ทำคลัสเตอร์นั้นเป็นไปตามดัชนีคลัสเตอร์ที่จำเป็นสำหรับดัชนีที่ไม่ทำคลัสเตอร์เพื่อแสดงรายการคอลัมน์ใด ๆ ที่มีอยู่ในดัชนีคลัสเตอร์หรือไม่

กล่าวอีกนัยหนึ่งถ้าตารางผลิตภัณฑ์มีดัชนีคลัสเตอร์บน ProductID เมื่อสร้างดัชนีที่ไม่ใช่คลัสเตอร์ซึ่งจะแนะนำให้รวมคอลัมน์ ProductID จำเป็นต้องเพิ่มอย่างไรก็ตามเป็นคอลัมน์หรือไม่?

ถ้าไม่มีมีสถานการณ์ที่จะเป็นการดีที่จะเพิ่มชื่อคอลัมน์ไปยังดัชนีที่ไม่ใช่คลัสเตอร์หรือไม่

คำตอบ:


20

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

สำหรับ NCI ที่ประกาศว่าไม่เหมือนใครพวกเขาจะถูกเพิ่มเป็นคอลัมน์ที่รวมไว้มิฉะนั้นจะถูกเพิ่มไปยังจุดสิ้นสุดของคีย์

คุณอาจต้องการเพิ่มคอลัมน์อย่างชัดเจนหากตำแหน่งเริ่มต้นไม่เหมาะสมสำหรับข้อความค้นหาของคุณ ตัวอย่างเช่นหากคุณต้องการควบคุมASC/ DESCdirection หรือคุณต้องการควบคุมตำแหน่งของคอลัมน์สำคัญในดัชนี

CREATE TABLE T
(
A INT,
B INT,
C INT ,
PRIMARY KEY CLUSTERED (B DESC, C DESC)
)

/*Implicitly adds B DESC, C DESC to end of key*/
CREATE NONCLUSTERED INDEX ix1 ON T(A ASC) 

/*No sort operation*/
SELECT  *
FROM T
ORDER BY A ASC,B DESC, C DESC

/*
But the avove index won't be able to seek into A,C  
and will need a residual predicate after seeking into A.

For the following query
*/

SELECT  *
FROM T
WHERE A=1 AND C > 4
ORDER BY C ASC, B DESC

/*This index explicitly controlling the key column position 
  and direction would be better*/
CREATE NONCLUSTERED INDEX ix2 ON T(A ASC, C ASC, B DESC) 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.