อะไรคือความแตกต่างระหว่างการบีบอัดข้อมูลบน PK กับบนโต๊ะ?


9

การบีบอัดข้อมูลสามารถตั้งค่าบนโต๊ะ:

CREATE TABLE dbo.SomeTable(
    SomeId [bigint] NOT NULL,
    OtherId [bigint] NOT NULL,
    IsActive [bit] NOT NULL,
 CONSTRAINT [PK_Some] PRIMARY KEY CLUSTERED 
 (
    SomeId Desc
 )
) ON SomePartitionScheme(SomeId) WITH (DATA_COMPRESSION=PAGE)

และสามารถกำหนดได้บนคีย์หลัก:

CREATE TABLE dbo.SomeTable(
    SomeId [bigint] NOT NULL,
    OtherId [bigint] NOT NULL,
    IsActive [bit] NOT NULL,
 CONSTRAINT [PK_Some] PRIMARY KEY CLUSTERED 
 (
    SomeId Desc
 ) WITH (DATA_COMPRESSION=PAGE)
) ON SomePartitionScheme(SomeId) 

แต่ถ้าคุณใส่ทั้งคู่คุณจะได้รับข้อผิดพลาดนี้:

อ็อพชัน DATA_COMPRESSION ถูกระบุมากกว่าหนึ่งครั้งสำหรับตารางหรืออย่างน้อยหนึ่งพาร์ติชันหากตารางถูกแบ่งพาร์ติชัน

มีความแตกต่างกับการวางไว้บน PK เทียบกับบนโต๊ะหรือไม่?


คุณคิดว่าจะมีความแตกต่างหรือไม่ถ้าคีย์หลักไม่ใช่คอลัมน์คลัสเตอร์ของตาราง :)
LowlyDBA

1
@ JohnM: ฉันจะคาดเดา แต่ฉันไม่รู้ (นั่นคือเหตุผลที่ฉันถาม :)
Vaccano

คำตอบ:


14

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


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

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

ฉันแสดงตัวเองไม่ดี คำตอบของคุณคือสิ่งที่ฉันกำลังขับรถ - ดัชนีกลุ่มสามารถบีบอัด (สิ่งที่มันคือการจัดทำดัชนี) หรือสามารถบีบอัดฮีป (ถ้าไม่มีดัชนีคลัสเตอร์) ไม่ใช่ทั้งสองอย่าง และดัชนีที่ไม่คลัสเตอร์สามารถบีบอัดแยกกันได้
Ross Presser

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