ผลกระทบความเร็วของการใช้ varchar ใน SQL Server 2008


9

ในสมัยก่อนการใช้varcharเกินcharเป็นสิ่งที่ไม่ใหญ่เพราะvarcharถูกเก็บไว้ในหน้าอื่นนอกเหนือจากส่วนที่เหลือของแถว วันนี้เป็นกรณีของ SQL Server 2008 หรือยัง ฉันจะเห็นหน่วยความจำ / ประสิทธิภาพเพิ่มขึ้นจากการเปลี่ยน 1-3 varchar(5)คอลัมน์เป็นchar(5)คอลัมน์บนตารางด้วยหรือไม่

ก) บอก 2.000.000 แถว b) หากvarcharคอลัมน์ใด ๆเป็นส่วนหนึ่งของดัชนี / คีย์หลัก


2
การทำซ้ำคำถามที่เป็นไปได้ฟิลด์ที่ยาวเกินไป (varchar / nvarchar) ส่งผลกระทบต่อประสิทธิภาพและการใช้งานดิสก์อย่างไร (MSSQL Server 2008) หากคุณคิดว่ามันไม่ซ้ำกันแน่นอนคุณจะพบคำตอบบางอย่างด้วย
แมเรียน

คำตอบ:


8

คุณกำลังสับสนข้อความ / varchar (สูงสุด) (ประเภท LOB) กับ varchar (n) / char (n)

มิฉะนั้นถ้าคุณใช้ถ่าน (1,000) ไม่ใช่ varchar (1,000) และความยาวของข้อมูลโดยเฉลี่ยก็คือบอกว่า 42 นี่คือการออกแบบที่ไม่ดีและมีพื้นที่ว่างเปล่าจำนวนมาก


ภายใต้ DB2 และเครื่องมือฐานข้อมูลอื่น char และ varchar ถูกเก็บต่างกันและคำแนะนำบางอย่างสำหรับ DB2 ที่ถ่ายโอนไปยัง SQL Server
Andrew Bickerton

@Andrew Bickerton: ยังมีอีกตำนาน ...
gbn

คุณช่วยชี้ฉันในทิศทางที่ว่าตำนานนั้นถูก debunked ได้หรือไม่? (ฉันยอมรับว่าคำแนะนำไม่ได้ใช้กับ SQL Server)
Andrew Bickerton

ฉันยังอ้างถึงหนึ่งในเวอร์ชันดั้งเดิมของ DB2 (อาจจะไม่ได้เป็นแบบนี้ในช่วง 10 ปีที่ผ่านมา) คล้ายกับคำแนะนำกับ SQL 2000 ที่ PKs ควรไม่เป็นแบบคลัสเตอร์เนื่องจากปัญหาด้านประสิทธิภาพยังคงอยู่ - ไม่เป็นความจริงอีกต่อไป
Andrew Bickerton

@Andrew Bickerton: เพียงแค่มองไปที่เกี่ยวกับโครงสร้างดิสก์ของ SQL Server (SO คำตอบจากหลายฉัน) stackoverflow.com/search?q=user%3A27535+anatomy ขออภัยที่ตอบช้า
gbn

3

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

สำหรับ SQL ยิ่งคุณใส่ข้อมูลลงในหน้าได้มากเท่าไหร่ประสิทธิภาพก็จะยิ่งดีขึ้นเท่านั้น


3

เท่าที่ฉันรู้ SQL Server ไม่เคยเก็บข้อมูลประเภท varchar หรือ nvarchar นอกแถว ข้อความและ NText นั้นแตกต่างกัน มีบิตเพิ่มเติมเล็กน้อยซึ่งถูกเก็บไว้สำหรับคอลัมน์ความกว้างของตัวแปร แต่ที่เกี่ยวกับมัน

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