ฉันมีข้อมูลตัวอักขระความยาวผันแปรและต้องการเก็บไว้ในฐานข้อมูล 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
จำนวนไบต์ต่อ