ฉันมีตารางบันทึกทั่วไปแถวประมาณ 5 เมตร
มีฟิลด์ "พิมพ์อย่างยิ่ง" ที่จัดเก็บประเภทเหตุการณ์และมีคอลัมน์ "พิมพ์จำนวนมาก" ที่ประกอบด้วยข้อมูลที่เกี่ยวข้องกับเหตุการณ์ นั่นคือความหมายของคอลัมน์ "ที่พิมพ์แบบแพ้ ๆ " นั้นขึ้นอยู่กับประเภทของเหตุการณ์
คอลัมน์เหล่านี้ถูกกำหนดเป็น:
USER_CHAR1 nvarchar(150) null,
USER_CHAR2 nvarchar(150) null,
USER_CHAR3 nvarchar(150) null,
USER_CHAR4 nvarchar(150) null,
USER_CHAR5 nvarchar(150) null,
USER_INTEGER1 int null,
USER_INTEGER2 int null,
USER_INTEGER3 int null,
USER_INTEGER4 int null,
USER_INTEGER5 int null,
USER_FLAG1 bit null,
USER_FLAG2 bit null,
USER_FLAG3 bit null,
USER_FLAG4 bit null,
USER_FLAG5 bit null,
USER_FLOAT1 float null,
USER_FLOAT2 float null,
USER_FLOAT3 float null,
USER_FLOAT4 float null,
USER_FLOAT5 float null
คอลัมน์ 1 และ 2 ในแต่ละประเภทมีการใช้งานอย่างหนัก แต่เริ่มจากหมายเลข 3 ประเภทของกิจกรรมน้อยมากที่จะให้ข้อมูลจำนวนมากนี้ ดังนั้นผมจึง desided คอลัมน์เครื่องหมาย 3-5 SPARSE
ในแต่ละประเภท
ฉันไม่วิเคราะห์บางครั้งแรกและเห็นว่าจริงอย่างน้อย 80% ของข้อมูลในแต่ละคอลัมน์เหล่านั้นnull
และในบาง 100% null
ของข้อมูล อ้างอิงถึง40% เงินฝากออมทรัพย์ตารางเกณฑ์ , SPARSE
จะเป็นชัยชนะอันยิ่งใหญ่กับพวกเขา
ดังนั้นฉันจึงไปและนำไปใช้SPARSE
กับคอลัมน์ 3-5 ในแต่ละกลุ่ม ตอนนี้ตารางของฉันใช้พื้นที่ข้อมูลประมาณ 1.8Gb ตามที่รายงานโดยsp_spaceused
ก่อนที่จะแยกเป็น 1Gb
ฉันพยายามdbcc cleantable
แต่ก็ไม่มีผล
จากนั้นdbcc shrinkdatabase
ไม่มีผลกระทบใด ๆ
งงงวยฉันลบSPARSE
และทำซ้ำdbcc
s ขนาดของโต๊ะยังคงอยู่ที่ 1.8Gb
สิ่งที่ช่วยให้?
rowid int not null identity(1,1) primary key clustered
จะมีดัชนีคลัสเตอร์