การใช้ขนาดคอลัมน์ใหญ่เกินความจำเป็น


16

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

CREATE TABLE someTable (
    id int primary key identity(1,1) not null,
    name varchar(128) not null unique
    );
INSERT INTO someTable values ('alice', 'bob something', 'charles can dance', 'dugan was here');

ฉันกำลังดูความยาวถ่านของnameคอลัมน์นั้นและฉันคิดว่าค่าของมันอาจจะไม่ใหญ่กว่าพูด 32 ตัวอักษรอาจจะไม่ใหญ่กว่า 24. มีประโยชน์กับการเปลี่ยนคอลัมน์นี้เป็นหรือไม่ เช่นvarchar(32)?

นอกจากนี้มีข้อได้เปรียบใด ๆ หรือไม่ที่จะรักษาขนาดคอลัมน์เริ่มต้นให้เป็นทวีคูณของ 4, 8, 32 และอื่น ๆ

คำตอบ:


15

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

การจัดสรรหน่วยความจำจะขึ้นอยู่กับจำนวนแถวที่ส่งคืนโดยแบบสอบถามคูณด้วยครึ่งหนึ่งของความยาวที่ประกาศของคอลัมน์

ต้องบอกว่าในกรณีนี้คุณมี 6 แถวคุณอาจไม่ต้องการปรับให้เหมาะสมก่อนเวลาอันควร หากคุณไม่เข้าร่วมตารางนี้กับอีกแถวนับล้านแถวจะไม่แตกต่างกันมากระหว่าง varchar (24) และ varchar (32) หรือแม้กระทั่ง varchar (128)

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


14

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

อย่างไรก็ตามในตารางที่มีขนาดใหญ่ขึ้นการปรับขนาดที่เหมาะสมเป็นสิ่งสำคัญ เหตุผลคือการประมาณการหน่วยความจำจะขึ้นอยู่กับสมมติฐานที่ว่าทุกค่าจะมีประชากร 50% ดังนั้นถ้าคุณมี varchar (128) ค่าทุกค่าจะมีขนาด 64 ไบต์โดยไม่คำนึงถึงข้อมูลจริงดังนั้นหน่วยความจำที่ได้รับจะเป็น 64b * จำนวนแถว หากค่าทั้งหมดจะเป็น 32 ตัวอักษรหรือน้อยกว่าทำให้ varchar (64) หรือแม้กระทั่ง varchar (32) อาจเป็นตัวเลือกที่ดีกว่า หากค่าร้อยละขนาดใหญ่ใกล้เคียงหรือใกล้สุดคุณอาจจะเถียงว่าถ่านที่จะเอาความผันผวนออกมา

สำหรับประโยชน์ของการมีความยาวสตริงที่ต่อยอดที่ 2 ฉันไม่คิดว่าใคร ๆ ในฮาร์ดแวร์จะสามารถแสดงให้เห็นถึงข้อได้เปรียบที่ชัดเจน

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