ขนาด varchar มีความสำคัญในตารางชั่วคราวหรือไม่?


16

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

ค่ายแสดงถูกต้องหรือไม่? มีความหมายอื่นหรือไม่? พวกเขากำลังใช้ SQL Server


ฉันขอยืนยันว่าบางทีคุณอาจไม่ต้องการตารางชั่วคราวในตอนแรก พวกมันใช้ทำอะไร หากพวกเขาต้องการคอลัมน์เหล่านี้ใช้เพื่ออะไร? พวกเขาจะใช้ในการรวมหรือเปรียบเทียบใด ๆ ? มีคอลัมน์พื้นฐาน nvarchar และไม่ใช่ varchar หรือไม่
Aaron Bertrand

@AaronBertrand ตารางชั่วคราวมีไว้สำหรับ modularity ข้อมูลได้รับการแปลงและเติมจำนวนครั้งตามกฎทางธุรกิจที่อาจมีการเปลี่ยนแปลง ฉันคิดว่ายังมีMAX()ส่วนผสมไม่กี่อย่าง
Brian Nickel

คำตอบ:


6

ขึ้นอยู่กับวิธีที่คุณใช้ตาราง temp ของคุณคุณอาจพบปัญหาการตัดทอนข้อมูล

ตัวอย่างนี้เป็นการประดิษฐ์เล็กน้อย แต่มันแสดงให้เห็นถึงจุดของฉัน ตัวอย่าง:

  1. คอลัมน์ตารางผู้ใช้ของคุณคือ varchar (50)
  2. คอลัมน์ temp table ของคุณคือ varchar (255)
  3. คุณมีระเบียนที่มี 45 อักขระในคอลัมน์นั้นในตารางผู้ใช้ของคุณ
  4. ในขั้นตอนของคุณคุณเชื่อมต่อ '- สำหรับการชนะ' ไปยังจุดสิ้นสุดของคอลัมน์นั้นก่อนที่จะรวมตาราง temp นั้นลงในตารางผู้ใช้ของคุณ

ตาราง temp ยินดีรับค่า varchar ใหม่ที่มีความยาว 59 อย่างไรก็ตามตารางผู้ใช้ของคุณไม่สามารถทำได้ ทั้งนี้ขึ้นอยู่กับวิธีที่คุณจัดการกับสิ่งนี้ในขั้นตอนของคุณซึ่งอาจส่งผลให้มีการตัดหรือข้อผิดพลาด

ขั้นตอนของคุณอาจดำเนินการในลักษณะที่ไม่คาดคิดเว้นแต่คุณจัดทำเอกสารและบัญชีสำหรับปัญหาเหล่านี้

โดยส่วนตัวฉันไม่คิดว่าจะมีคำตอบสำหรับคำถามนี้ที่ถูกต้อง 100% ของเวลา มันขึ้นอยู่กับว่าคุณกำลังใช้ตารางชั่วคราวเหล่านั้นอย่างไร

หวังว่านี่จะช่วยได้


0

ใช้varchar(255)สำหรับvarcharเขตข้อมูลทั้งหมดในตารางชั่วคราวในขั้นตอนการจัดเก็บ

ฉันจะเอนตัวไปสู่การใช้ความยาวสนามที่แท้จริง

ฉันอ่านเมื่อเร็ว ๆ นี้ว่า MySQL (ฉันสมมติว่า SQL Server คล้ายกัน) temp tables จัดสรรหน่วยความจำให้เพียงพอเพื่อเก็บความยาวสูงสุดที่เป็นไปได้สำหรับแต่ละvarcharคอลัมน์ ... แนวทางที่เป็นระบบในการจัดสรร 200% -500% ของหน่วยความจำที่จำเป็นสำหรับvarcharฟิลด์ทั้งหมด กระบวนงานที่เก็บไว้ดูเหมือนจะเป็นการดึงทรัพยากรระบบที่ไม่จำเป็นออกไป หากคุณกำลังใช้หน่วยความจำจำนวนมากในการสร้างตารางชั่วคราวเหล่านี้คุณอาจอ้างสิทธิ์หน่วยความจำที่ใช้ในการแคชโดยไม่จำเป็นสร้างงานให้กับเซิร์ฟเวอร์ได้มากขึ้นในอนาคตในอนาคตแม้หลังจากขั้นตอนการจัดเก็บเสร็จสิ้น

แก้ไข:ดูคำตอบของ Bill Karwin: /programming/1962310/importance-of-varchar-length-in-mysql-table


2
สมมติว่า SQL Server คล้ายกัน? ฉันจะไม่ ...
AK

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