ฉันรู้ว่าเมื่อVARCHAR(MAX)/NVARCHAR(MAX)
มีการใช้คอลัมน์ข้อมูลจะถูกเก็บไว้นอกแถว ...
แต่จริงๆแล้วขึ้นอยู่กับการตั้งค่าของตัวเลือกซึ่งสามารถตั้งค่าการใช้large value types out of row
sp_tableoption
จากเอกสารประกอบ :
เริ่มต้นสำหรับMAX
ค่าจะถูกเก็บไว้ในแถวถึง 8000 ไบต์ถ้าพวกเขาพอดี หากคุณไม่เคยsp_tableoption
เปลี่ยนค่าเริ่มต้นMAX
ข้อมูลของคุณจะถูกจัดเก็บในแถว
ดังกล่าวเป็นแนวทางปฏิบัติที่ไม่ดีในการใช้MAX
ชนิดข้อมูลสำหรับค่าที่ไม่เกิน 8000 ไบต์ - ใช้ชนิดที่ไม่ใช่ MAX แทน นอกเหนือจากสิ่งอื่นแล้วประสิทธิภาพการทำงานมักด้อยลงเมื่อจัดการกับMAX
ชนิดเนื่องจาก SQL Server จะต้องเตรียมรับมือกับข้อมูลที่อาจมีขนาดใหญ่ถึง 2GB
แต่ละฟิลด์ถูกเก็บไว้นอกแถวหรือมีเพียงฟิลด์สูงสุดเท่านั้นหรือไม่
เฉพาะMAX
คนที่ นอกจากนี้หากMAX
คอลัมน์ในแถวก่อนหน้านี้ถูกย้ายออกไปแถวคอลัมน์เฉพาะในแถวนั้นจะได้รับผลกระทบ มันจะถูกแทนที่ในแถวโดยตัวชี้ไปยังLOB
โครงสร้างปิดแถว นอกจากนี้ยังมีสถานการณ์ที่คอลัมน์ที่ไม่ใช่ MAX อาจถูกย้ายออกจากแถว
หากคุณใช้ดัชนีคลัสเตอร์ของตารางเพื่ออ่านระเบียนทั้งหมดเขตข้อมูลที่ถูกจัดเก็บนอกแถวจะถูกอ่านด้วยหรือไม่
การสแกนดัชนีสำรวจเป็นกลุ่มจะแสดงเฉพาะข้อมูลในแถว หากจำเป็นต้องใช้ข้อมูลแถวนอกสำหรับแบบสอบถามจะมีการค้นหาโดยใช้ตัวชี้ในแถว