ฉันรู้ว่าเมื่อ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 อาจถูกย้ายออกจากแถว
หากคุณใช้ดัชนีคลัสเตอร์ของตารางเพื่ออ่านระเบียนทั้งหมดเขตข้อมูลที่ถูกจัดเก็บนอกแถวจะถูกอ่านด้วยหรือไม่
การสแกนดัชนีสำรวจเป็นกลุ่มจะแสดงเฉพาะข้อมูลในแถว หากจำเป็นต้องใช้ข้อมูลแถวนอกสำหรับแบบสอบถามจะมีการค้นหาโดยใช้ตัวชี้ในแถว