มีจุดใดบ้างในการลดขนาดคอลัมน์ VARCHAR?


18

Googling แถว ๆนั้นดูเหมือนว่าจะมีการรายงานแบบผสมไม่ว่าขนาดของVARCHAR2คอลัมน์ใน Oracle จะส่งผลกระทบต่อประสิทธิภาพหรือไม่

ฉันต้องการที่จะให้คำถามVARCHARขนาดบิดเล็กน้อยและหวังว่าจะได้รับข้อมูลเชิงลึกในนี้:

ที่กำหนด (หลาย) สาขาข้อความอิสระ ( ไม่ได้สิ่งที่สั้น ๆ เช่นชื่อ) ที่คุณต้องการในการจัดเก็บใน (Oracle) ฐานข้อมูลจะมีจุดใด (WRT. ประสิทธิภาพหรืออื่น ๆ ) ในไม่ maxing ออกVARCHARความจุ ( VARCHAR2(4000)ใน Oracle) แต่เลือก ค่าที่น้อยกว่าเช่น 1024 หรือ 512 เพราะนั่นน่าจะเพียงพอใน 98% ของคดีอยู่แล้ว


คำตอบ:


12

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

โปรดจำไว้ว่าแอพจำนวนมาก (โดยเฉพาะแอปพลิเคชันทางเว็บ) ใช้ UTF-8 ซึ่งเป็นชุดอักขระแบบหลายไบต์ ดังนั้นคุณควรพิจารณาอักขระแทนไบต์

หากฉันคาดว่าจะมีตัวละครกว่าพันตัวฉันจะพิจารณา CLOB อย่างกระตือรือร้น ฉันคิดว่ามันจะเก็บข้อความธรรมดาหรือมาร์กอัป (wiki / html?) รูปแบบการใช้กับภาษาที่ไม่ใช่ยูโร ตัวอย่างเช่นคำถามและคำตอบที่นี่จะเป็น CLOB แต่ความคิดเห็นสามารถใส่ใน VARCHAR ได้

หากคุณใช้ VARCHAR สูงสุดในอีกหกเดือนข้างหน้าใครบางคนจะต้องการทำให้มันใหญ่ขึ้นอีกครั้งและคุณจะเตะตัวเองโดยไม่ใช้ CLOB


2
โดยทั่วไปแล้ว UTF-8 จะใช้หนึ่งไบต์สำหรับอักขระหนึ่งตัวสำหรับภาษาตะวันตก มันเป็นหลายไบต์ในแง่ที่ว่ามันอนุญาตให้มีการเรียงลำดับ "หลบหนี" หลายไบต์เพื่อแทนอักขระที่ไม่ใช่ตะวันตก
Eric J.

9

โดยทั่วไปไม่มีข้อควรพิจารณาด้านประสิทธิภาพแม้ว่าจะมีปัญหาด้านที่อาจมีความสำคัญกับคุณ ขีด จำกัด ของ a varcharควรถูกพิจารณาว่าเป็นข้อ จำกัด เช่นเดียวกับข้ออื่น ๆ - มีการบังคับใช้กฎทางธุรกิจ

IMO คำถามที่คุณควรจะถามคือ "ฉันต้องการที่จะป้องกันไม่ให้ข้อมูลฟรีข้อความที่เก็บไว้ในด้านนี้อยู่นานแล้วnไบต์ / ตัวอักษร" - นั่นเป็นเพียงการกำหนดปัจจัยในการเลือกระหว่างและvarchar(512)varchar(4000)

โปรดทราบว่าฉันสมมติว่าคุณกำลังพูดถึงvarcharชนิดของ SQL สถานการณ์ที่แตกต่างกันpl/sqlและการเลือกความยาวอาจมีความสำคัญสำหรับเหตุผลการจัดสรรหน่วยความจำ


ขอบคุณ เท่าที่ประสบการณ์ (จำกัด มาก) ของฉันดำเนินต่อไป "กฎเกณฑ์ทางธุรกิจ" ใด ๆ ที่ระบุขีด จำกัด ระหว่าง "500 - 3999" นั้นเป็นกฎเกณฑ์แบบง่ายๆนั่นคือมีคนชอบตัวเลข IMHO ถ้าฉันต้องการข้อความฟรีและไม่มีการดำเนินการตามมา (บริบทของคำถามนี้) ไม่ว่าจะเป็น maxed out (4000) หรือไม่ใช่ข้อความอิสระ --- ประเด็นที่ฉันพยายามทำในความคิดเห็นนี้: ฉันคิดว่าคงไม่มีกฎเกณฑ์ทางธุรกิจที่จะช่วยเลือก btw 512 และ 4000 (เว้นแต่จะเป็น: "เป็นตัวอักษรให้ได้มากที่สุด")
มาร์ติน

หากเป็น "ตัวอักษรให้มากที่สุด" จริงๆแล้ว @gary พูดว่าคุณควรพิจารณา a clobใช่มั้ย
แจ็คดักลาส

4

ถ้าค่าที่มีขนาดเล็กจะทำงานให้ 98% ของกรณี แต่จะใช้เวลา VARCHAR2 (4000) ในการทำงาน 100% ของกรณีแล้วคุณมีทางเลือกน้อย แต่จะใช้ค่าที่มีขนาดใหญ่ การสร้างตารางแยกต่างหากสำหรับ 2% ของค่าและจากนั้นประสานงานแทรก / เลือก ฯลฯ จะเพิ่มความซับซ้อนที่จะกำจัดหน่วยความจำหรือประสิทธิภาพการทำงานที่ได้รับประโยชน์จากการไม่ขยายสนาม

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