TEXT
และVarChar(MAX)
เป็นประเภทข้อมูลอักขระความยาวแปรผันขนาดใหญ่แบบ Non-Unicode ซึ่งสามารถจัดเก็บอักขระได้สูงสุด 2147483647 อักขระที่ไม่ใช่ Unicode (เช่นความจุสูงสุดคือ: 2GB)
ตามลิงค์ MSDN Microsoft ขอแนะนำให้หลีกเลี่ยงการใช้ประเภทข้อมูล Text และจะถูกลบออกใน SQL Server รุ่นต่อไปในอนาคต Varchar (Max) เป็นชนิดข้อมูลที่แนะนำสำหรับการจัดเก็บค่าสตริงขนาดใหญ่แทนประเภทข้อมูล Text
- พื้นที่เก็บข้อมูลแบบ In-Row หรือ Out-of-Row
ข้อมูลของText
คอลัมน์ประเภทถูกจัดเก็บไว้นอกแถวในหน้าข้อมูล LOB ที่แยกต่างหาก แถวในหน้าข้อมูลตารางจะมีตัวชี้ 16 ไบต์ไปยังหน้าข้อมูล LOB ที่มีข้อมูลจริงอยู่ ในขณะที่ข้อมูลของVarchar(max)
คอลัมน์ประเภทจะถูกเก็บไว้ในแถวถ้าน้อยกว่าหรือเท่ากับ 8000 ไบต์ หากค่าคอลัมน์ Varchar (สูงสุด) ข้าม 8000 ไบต์ค่าคอลัมน์ Varchar (สูงสุด) จะถูกเก็บไว้ในหน้าข้อมูล LOB แยกต่างหากและแถวจะมีตัวชี้ 16 ไบต์ไปยังหน้าข้อมูล LOB ที่มีข้อมูลจริงอยู่ ดังนั้นIn-Row
Varchar (สูงสุด) จึงเหมาะสำหรับการค้นหาและดึงข้อมูล
- ฟังก์ชันที่รองรับ / ไม่รองรับ
ฟังก์ชันสตริงตัวดำเนินการหรือโครงสร้างที่ไม่ทำงานในคอลัมน์ชนิดข้อความบางส่วน แต่ทำงานในคอลัมน์ประเภท VarChar (สูงสุด)
=
เท่ากับ Operator บนคอลัมน์ประเภท VarChar (สูงสุด)
จัดกลุ่มตามข้อในคอลัมน์ประเภท VarChar (สูงสุด)
ดังที่เราทราบว่าค่าคอลัมน์ประเภท VarChar (สูงสุด) ถูกเก็บไว้นอกแถวเฉพาะในกรณีที่ความยาวของค่าที่จะเก็บไว้ในนั้นมีค่ามากกว่า 8000 ไบต์หรือมีพื้นที่ไม่เพียงพอในแถวมิฉะนั้นจะจัดเก็บ มันอยู่ในแถว ดังนั้นหากค่าส่วนใหญ่ที่เก็บไว้ในคอลัมน์ VarChar (สูงสุด) มีขนาดใหญ่และเก็บไว้นอกแถวพฤติกรรมการดึงข้อมูลจะคล้ายกับคอลัมน์ที่เป็นประเภทข้อความ
แต่ถ้าค่าส่วนใหญ่ที่เก็บไว้ในคอลัมน์ประเภท VarChar (สูงสุด) มีขนาดเล็กพอที่จะเก็บในแถว จากนั้นการดึงข้อมูลที่ไม่รวมคอลัมน์ LOB ต้องมีจำนวนหน้าข้อมูลมากขึ้นในการอ่านเนื่องจากค่าคอลัมน์ LOB ถูกเก็บไว้ในแถวในหน้าข้อมูลเดียวกันกับที่เก็บค่าคอลัมน์ที่ไม่ใช่ LOB แต่ถ้าแบบสอบถามแบบใช้เลือกข้อมูลมีคอลัมน์ LOB จะต้องใช้จำนวนหน้าน้อยลงในการอ่านข้อมูลเมื่อเทียบกับคอลัมน์ประเภทข้อความ
ข้อสรุป
ใช้VarChar(MAX)
ชนิดข้อมูลแทนTEXT
เพื่อประสิทธิภาพที่ดี
แหล่ง