ฉันมีข้อมูลตัวอักขระความยาวผันแปรและต้องการเก็บไว้ในฐานข้อมูล SQL Server (2005) ฉันต้องการเรียนรู้แนวปฏิบัติที่ดีที่สุดเกี่ยวกับวิธีเลือก TEXT SQL type หรือเลือก VARCHAR SQL type ข้อดีและข้อเสียในประสิทธิภาพ / footprint / function
ฉันมีข้อมูลตัวอักขระความยาวผันแปรและต้องการเก็บไว้ในฐานข้อมูล SQL Server (2005) ฉันต้องการเรียนรู้แนวปฏิบัติที่ดีที่สุดเกี่ยวกับวิธีเลือก TEXT SQL type หรือเลือก VARCHAR SQL type ข้อดีและข้อเสียในประสิทธิภาพ / footprint / function
คำตอบ:
หากคุณกำลังใช้ SQL Server 2005 varchar(MAX)หรือภายหลังการใช้งาน textประเภทข้อมูลจะเลิกและไม่ควรนำมาใช้สำหรับการทำงานการพัฒนาใหม่ จากเอกสาร :
สำคัญ
ntext,textและimageประเภทข้อมูลจะถูกลบใน Microsoft SQL Server รุ่นอนาคต หลีกเลี่ยงการใช้ชนิดข้อมูลเหล่านี้ในงานพัฒนาใหม่และวางแผนที่จะแก้ไขแอปพลิเคชันที่ใช้งานอยู่ในปัจจุบัน ใช้nvarchar (สูงสุด) , varchar (สูงสุด)และvarbinary (สูงสุด)แทน
TEXTใช้สำหรับข้อมูลสตริงขนาดใหญ่ หากความยาวของฟิลด์เกินกว่าขีด จำกัด ที่กำหนดข้อความจะถูกเก็บไว้นอกแถว
VARCHARจะถูกเก็บไว้ในแถวและมีความยาวไม่เกิน8000อักขระ หากคุณพยายามสร้าง a VARCHAR(x)โดยที่x> 8000คุณจะได้รับข้อผิดพลาด:
เซิร์ฟเวอร์: ข่าวสารเกี่ยวกับ 131, ระดับ 15, สถานะ 3, บรรทัด 1
ขนาด () ที่กำหนดให้กับประเภท 'varchar' เกินขนาดสูงสุดที่อนุญาตสำหรับชนิดข้อมูลใด ๆ (8000)
ข้อจำกัดความยาวเหล่านี้ไม่เกี่ยวข้องVARCHAR(MAX)ในSQL Server 2005ซึ่งอาจถูกจัดเก็บไว้นอกแถวเหมือนTEXTกัน
โปรดทราบว่าMAXไม่ได้เป็นชนิดคงที่นี่VARCHARและเป็นชนิดที่แตกต่างกันมากหลังถูกมากใกล้เคียงกับVARCHAR(MAX)TEXT
ในSQL Serverเวอร์ชันก่อนหน้านี้คุณไม่สามารถเข้าถึงTEXTโดยตรงคุณสามารถรับTEXTPTRและใช้งานREADTEXTและWRITETEXTฟังก์ชันได้
ในSQL Server 2005คุณสามารถเข้าถึงTEXTคอลัมน์ได้โดยตรง(แต่คุณยังต้องใช้การส่งแบบชัดแจ้งVARCHARเพื่อกำหนดค่าให้กับคอลัมน์เหล่านั้น)
TEXT ดี:
VARCHAR ดี:
ด้วยการเลือกที่นี่ฉันหมายถึงการออกแบบสอบถามใด ๆ ที่ส่งคืนค่าของคอลัมน์
โดยการค้นหาที่นี่หมายถึงการออกแบบสอบถามใด ๆ ที่ผลลัพธ์ขึ้นอยู่กับค่าของคอลัมน์TEXTหรือ VARCHARซึ่งรวมถึงการใช้มันในการใด ๆJOINหรือWHEREสภาพ
เนื่องจากTEXTถูกเก็บไว้นอกแถวการสืบค้นที่ไม่เกี่ยวข้องกับTEXTคอลัมน์จึงมักจะเร็วกว่า
ตัวอย่างของสิ่งที่TEXTดีสำหรับ:
ตัวอย่างของสิ่งที่VARCHARดีสำหรับ:
ตามกฎของหัวแม่มือถ้าคุณเคยต้องการให้คุณค่าข้อความเกิน200ตัวอักษรและTEXTไม่ได้ใช้ร่วมในคอลัมน์นี้ใช้
VARCHARมิฉะนั้นใช้
PSเช่นเดียวกับการUNICODEเปิดใช้งานNTEXTและNVARCHARเช่นกันซึ่งคุณควรใช้สำหรับตัวอย่างข้างต้น
PPSเช่นเดียวกับVARCHAR(MAX)และNVARCHAR(MAX)ที่SQL Server 2005ใช้แทนและTEXT NTEXTคุณจะต้องเปิดใช้งานlarge value types out of rowสำหรับพวกเขาด้วยsp_tableoptionหากคุณต้องการให้พวกเขาออกจากแถว
ดังกล่าวข้างต้นและที่นี่ , TEXTเป็นไปได้เลิกใช้ในอนาคต:
text in rowตัวเลือกจะถูกลบออกในรุ่นอนาคตของSQL Servertext in rowหลีกเลี่ยงการใช้ตัวเลือกนี้ในการพัฒนางานใหม่และวางแผนที่จะปรับเปลี่ยนการใช้งานที่ใช้งานในปัจจุบัน เราขอแนะนำให้คุณจัดเก็บข้อมูลขนาดใหญ่โดยใช้varchar(max),nvarchar(max)หรือvarbinary(max)ชนิดข้อมูล ในการควบคุมพฤติกรรมในแถวและนอกแถวของชนิดข้อมูลเหล่านี้ให้ใช้large value types out of rowตัวเลือก
ในเซิร์ฟเวอร์ SQL 2005 ประเภทข้อมูลใหม่แนะนำ: varchar(max)และnvarchar(max)
พวกเขามีข้อได้เปรียบของการพิมพ์ข้อความเก่าที่พวกเขาสามารถมี op ถึง 2GB ของข้อมูล แต่พวกเขายังมีประโยชน์มากที่สุดของและvarchar nvarcharข้อดีเหล่านี้คือความสามารถในการใช้ฟังก์ชันการจัดการสตริงเช่น substring ()
นอกจากนี้ varchar (สูงสุด) จะถูกเก็บไว้ในพื้นที่ (ดิสก์ / หน่วยความจำ) ของตารางในขณะที่ขนาดต่ำกว่า 8Kb เมื่อคุณวางข้อมูลเพิ่มเติมในฟิลด์ข้อมูลจะถูกเก็บไว้นอกพื้นที่ของตาราง ข้อมูลที่จัดเก็บในพื้นที่ของตารางคือ (ปกติ) เรียกข้อมูลได้เร็วขึ้น
กล่าวโดยย่ออย่าใช้ข้อความเนื่องจากมีทางเลือกที่ดีกว่า: (n) varchar (สูงสุด) และใช้เฉพาะ varchar (สูงสุด) เมื่อ varchar ปกติไม่ใหญ่พอนั่นคือถ้าคุณคาดว่าสตริง teh ที่คุณจะเก็บจะเกิน 8000 ตัวอักษร
ตามที่ระบุไว้คุณสามารถใช้ SUBSTRING ในประเภทข้อมูล TEXT แต่ตราบใดที่ฟิลด์ TEXT มีอักขระน้อยกว่า 8000 ตัว
มีการเปลี่ยนแปลงที่สำคัญบางอย่างใน ms 2008 -> อาจมีค่าเมื่อพิจารณาบทความต่อไปนี้เมื่อทำการตัดสินใจเกี่ยวกับชนิดข้อมูลที่จะใช้ http://msdn.microsoft.com/en-us/library/ms143432.aspx
จำนวนไบต์ต่อ