คำถามติดแท็ก varchar

โดยปกติหมายถึงชนิดข้อมูลสตริงความยาวตัวแปร

2
การใช้ขนาดคอลัมน์ใหญ่เกินความจำเป็น
ฉันกำลังสร้างฐานข้อมูล SQL Server กับคนอื่น หนึ่งในตารางมีขนาดเล็ก (6 แถว) พร้อมข้อมูลที่อาจคงที่ มีความเป็นไปได้จากระยะไกลว่าจะมีการเพิ่มแถวใหม่ ตารางมีลักษณะดังนี้: CREATE TABLE someTable ( id int primary key identity(1,1) not null, name varchar(128) not null unique ); INSERT INTO someTable values ('alice', 'bob something', 'charles can dance', 'dugan was here'); ฉันกำลังดูความยาวถ่านของnameคอลัมน์นั้นและฉันคิดว่าค่าของมันอาจจะไม่ใหญ่กว่าพูด 32 ตัวอักษรอาจจะไม่ใหญ่กว่า 24. มีประโยชน์กับการเปลี่ยนคอลัมน์นี้เป็นหรือไม่ เช่นvarchar(32)? นอกจากนี้มีข้อได้เปรียบใด ๆ หรือไม่ที่จะรักษาขนาดคอลัมน์เริ่มต้นให้เป็นทวีคูณของ 4, …

4
ดัชนีประสิทธิภาพสำหรับ CHAR กับ VARCHAR (Postgres)
ในคำตอบนี้ ( /programming/517579/strings-as-primary-keys-in-sql-database ) คำพูดเดียวจับตาฉัน: โปรดทราบว่ามักจะมีความแตกต่างระหว่าง CHAR และ VARCHAR บ่อยมากเมื่อทำการเปรียบเทียบดัชนี สิ่งนี้ใช้ได้ / ยังใช้กับ Postgres หรือไม่? ฉันพบหน้าเว็บใน Oracle ที่อ้างว่าCHARเป็นนามแฝงไม่มากก็น้อยVARCHARดังนั้นประสิทธิภาพของดัชนีก็เหมือนกัน แต่ฉันไม่พบอะไรที่ชัดเจนสำหรับ Postgres

5
วิธีเพิ่ม 1 มิลลิวินาทีในสตริงวันที่และเวลา
จากการเลือกฉันสามารถส่งคืนแถว x แบบนี้: 1 2019-07-23 10:14:04.000 1 2019-07-23 10:14:11.000 2 2019-07-23 10:45:32.000 1 2019-07-23 10:45:33.000 เรามีมิลลิวินาทีทั้งหมดที่มี 0 มีวิธีเพิ่ม 1 ต่อ 1 มิลลิวินาทีหรือไม่ดังนั้นการเลือกจะเป็นดังนี้: 1 2019-07-23 10:14:04.001 1 2019-07-23 10:14:11.002 2 2019-07-23 10:45:32.003 1 2019-07-23 10:45:33.004 ฉันกำลังพยายามสร้างเคอร์เซอร์หรือแม้แต่การอัปเดตที่ไม่สำเร็จ นี่คือแบบสอบถามเพื่อให้ได้ผลลัพธ์ที่ฉันต้องการ: select top 10 ModifiedOn from [SCHEMA].[dbo].[TABLE] where FIELD between '2019-07-23 00:00' and '2019-07-23 23:59' …

2
ผลกระทบใดที่จะลดขนาดของคอลัมน์ varchar ที่มีต่อไฟล์ฐานข้อมูล
เรามีตารางจำนวนหนึ่งในฐานข้อมูลของเราที่มีVARCHAR(MAX)คอลัมน์ที่VARCHAR(500)(หรือบางสิ่งที่เล็กกว่ามาก) จะพอเพียง โดยธรรมชาติฉันต้องการทำความสะอาดสิ่งเหล่านี้และทำให้ขนาดลงไปถึงระดับที่สมเหตุสมผลยิ่งขึ้น 'วิธีการ' ที่จะทำสิ่งนี้ฉันเข้าใจ: คำถามของฉันคือสิ่งที่จะแก้ไขคอลัมน์เหล่านี้ทำในหน้าและที่มีอยู่ในดิสก์? (มีข้อมูลมากมายเกี่ยวกับสิ่งที่เกิดขึ้นเมื่อคุณขยายคอลัมน์ แต่มีปัญหาในการค้นหาข้อมูลเกี่ยวกับสิ่งที่เกิดขึ้นเมื่อคุณย่อขนาด) ตารางบางตัวมีจำนวนแถวน้อยมากดังนั้นฉันจึงไม่กังวลเกี่ยวกับค่าใช้จ่ายในการเปลี่ยนแปลง แต่บางตารางมีขนาดค่อนข้างใหญ่และฉันกังวลว่าอาจมีการจัดระเบียบใหม่และทำให้การบล็อก / การหยุดทำงานเป็นจำนวนมาก ในทางปฏิบัติฉันต้องการวิธีประมาณหน้าต่างการบำรุงรักษา โดยทั่วไปฉันต้องการทำความเข้าใจให้ดีขึ้นว่าเอ็นจิ้นฐานข้อมูลทำงานอย่างไรในกรณีนี้ ขอบคุณล่วงหน้า! แก้ไข: ฉันมีตาราง 20 ตารางที่ฉันดู แต่มีเพียงครึ่งหนึ่งเท่านั้นที่มีจำนวนแถวมากกว่า 1,000 ใหญ่ที่สุดมีเกือบล้านแถว ผู้กระทำความผิดที่เลวร้ายที่สุดคือตารางที่มี 350,000 แถวและสี่VARCHAR(MAX)คอลัมน์ที่สามารถหดได้ถึงVARCHAR(500)ระดับ

1
ค่าใช้จ่ายสำหรับ varchar (n) คืออะไร?
ฉันต้องการถามถึงความหมายของส่วนนี้จากPostgres docเกี่ยวกับvarchar(n)ประเภท: ความต้องการพื้นที่เก็บข้อมูลสำหรับสตริงสั้น (สูงสุด 126 ไบต์) คือ 1 ไบต์บวกกับสตริงจริงซึ่งรวมถึงการเว้นวรรคเว้นวรรคในกรณีของอักขระ สตริงที่ยาวกว่ามี 4 ไบต์ของค่าใช้จ่ายแทน 1 สมมติว่าฉันมีvarchar(255)ทุ่งนา และตอนนี้คำสั่งต่อไปนี้: หากฟิลด์นี้มีสตริง 10 ไบต์ค่าใช้จ่ายอยู่ที่ 1 ไบต์ ดังนั้นสตริงจะใช้ 11 ไบต์ ถ้าเขตข้อมูลถือสตริงที่ใช้ 140 ไบต์ค่าใช้จ่ายอยู่ที่ 4 ไบต์ ดังนั้นสตริงจะใช้ 144 ไบต์ ข้อความข้างต้นเป็นจริงหรือไม่? ที่นี่มีคนเข้าใจเอกสารเช่นเดียวกับผม แต่ที่นี่มีคนระบุค่าใช้จ่ายอยู่เสมอ 4 ไบต์ที่นี่ ?

2
SQL Server VARCHAR ความกว้างคอลัมน์
ฉันพบคำแนะนำที่ขัดแย้งกันว่ามีผลกระทบต่อประสิทธิภาพการทำงานหรือไม่เมื่อระบุคอลัมน์ VARCHAR กว้างเกินไปเช่น VARCHAR (255) เมื่อ VARCHAR (30) อาจทำ ฉันเห็นข้อตกลงอย่างสม่ำเสมอว่ามีการดำเนินการอย่างต่อเนื่องหากทั้งแถวเกินกว่า 8060 ไบต์ นอกจากนั้นฉันเห็นความไม่ลงรอยกัน การอ้างสิทธิ์เป็นจริงThe default is SET ANSI PADDING ON = potential for lots of trailing spacesหรือไม่ ตราบใดที่ความกว้างแถวรวมน้อยกว่า 8060 มีความกังวลเกี่ยวกับประสิทธิภาพที่แท้จริงในคอลัมน์ VARCHAR ที่มีขนาดใหญ่เกินไปหรือไม่? หลักฐานที่แสดงความกว้างของคอลัมน์นั้นสำคัญ The same goes for CHAR and VARCHAR data types. Don’t specify more characters in character columns that …

2
ทำความเข้าใจกับ varchar (สูงสุด) 8000 คอลัมน์และทำไมฉันถึงสามารถเก็บได้มากกว่า 8000 ตัวอักษร
จากเอกสารของ Microsoft นี้ + n กำหนดความยาวสตริงและสามารถเป็นค่าตั้งแต่ 1 ถึง 8,000 max บ่งชี้ว่าขนาดหน่วยเก็บข้อมูลสูงสุดคือ 2 ^ 31-1 ไบต์ (2 GB) ขนาดการจัดเก็บข้อมูลเป็นความยาวจริงของข้อมูลที่ป้อน + 2 ไบต์ โปรดช่วยฉันเข้าใจสิ่งนี้ อักขระสูงสุดสำหรับ varchar น่าจะเป็น8000ซึ่งน้อยกว่า2GBมูลค่าของข้อมูล ฉันเห็นว่ามีระเบียนในvarchar(max)คอลัมน์ของตารางเฉพาะที่มีlen(mycolumn)> 100,000 ดังนั้นฉันรู้ว่าฉันจะได้รับมากกว่า8000อักขระลงในvarchar(max)คอลัมน์ คำถามที่ 1:อย่างไร8000ตัวละครเข้ามาเล่นและที่ฉันควรจะตระหนักถึงมันได้หรือไม่ คำถามที่ 2 : ข้อความค้นหา. dat สุทธิไปยังคอลัมน์นี้จะแสดงผลลัพธ์แบบเต็มด้วยอักขระ 100 000+ ตัวเสมอหรือไม่

1
หากคอลัมน์ VARCHAR (MAX) รวมอยู่ในดัชนีค่าทั้งหมดจะถูกเก็บไว้ในหน้าดัชนีหรือไม่?
ฉันขอสิ่งนี้ด้วยความอยากรู้อยากเห็นได้รับแรงบันดาลใจจากคำถามนี้ เรารู้ว่าVARCHAR(MAX)ค่าที่ยาวกว่า 8000 ไบต์จะไม่ถูกเก็บไว้ในแถว แต่ในหน้า LOB แยกต่างหาก หลังจากนั้นการดึงแถวที่มีค่าดังกล่าวจำเป็นต้องมีการดำเนินการ IO แบบตรรกะสองอย่างหรือมากกว่านั้น เราสามารถเพิ่มVARCHAR(MAX)คอลัมน์เป็นINCLUDEd ไปยังดัชนีที่ไม่ซ้ำกันดังที่แสดงในคำถามที่เชื่อมโยง หากคอลัมน์นี้มีค่าที่มีความยาวเกิน 8000 ไบต์ค่าดังกล่าวจะยังคงถูกเก็บไว้ "แบบอินไลน์" ในหน้าดัชนีใบหรือจะย้ายไปยังหน้า LOB หรือไม่

1
แนวปฏิบัติที่ดีที่สุดในปัจจุบันเกี่ยวกับการปรับขนาด varchar ใน SQL Server คืออะไร
ฉันพยายามเข้าใจวิธีที่ดีที่สุดในการตัดสินใจว่าคอลัมน์ varchar ขนาดใหญ่ควรเป็นอย่างไรทั้งจากมุมมองการจัดเก็บและประสิทธิภาพ ประสิทธิภาพ จากการวิจัยของฉันดูเหมือนว่าควรใช้ varchar (สูงสุด) เฉพาะในกรณีที่คุณต้องการเท่านั้น นั่นคือถ้าคอลัมน์จะต้องรองรับมากกว่า 8000 ตัวอักษรเหตุผลหนึ่งคือการขาดการจัดทำดัชนี (แม้ว่าฉันน่าสงสัยเล็กน้อยของการจัดทำดัชนีในเขตข้อมูล varchar โดยทั่วไปฉันค่อนข้างใหม่กับหลักการ DB แม้ว่าอาจจะไม่มีมูลเลย ) และการบีบอัด (ยิ่งกังวลเรื่องพื้นที่เก็บข้อมูล) ในความเป็นจริงแล้วคนทั่วไปดูเหมือนจะแนะนำให้ใช้เฉพาะสิ่งที่คุณต้องการเมื่อทำ varchar (n) .... การ oversize ไม่ดีเพราะการสืบค้นจะต้องคำนึงถึงขนาดสูงสุด แต่ก็มีการระบุด้วยว่าเครื่องยนต์จะใช้ขนาดครึ่งหนึ่งที่ระบุไว้เป็นค่าประมาณขนาดเฉลี่ยจริงของข้อมูล นี่หมายความว่าเราควรกำหนดจากข้อมูลว่าขนาดเฉลี่ยคืออะไรเพิ่มขนาดเป็นสองเท่าและใช้เป็น n สำหรับข้อมูลที่มีค่าความแปรปรวนต่ำมาก แต่ไม่เป็นศูนย์ นี่หมายถึงการขยายขนาดเกินขนาดสูงสุด 2 เท่าซึ่งดูเหมือนจะมาก แต่อาจไม่ใช่หรือ ข้อมูลเชิงลึกจะได้รับการชื่นชม ที่เก็บข้อมูล หลังจากอ่านเกี่ยวกับวิธีการทำงานของหน่วยเก็บข้อมูลแบบ in-row และ out-of-row และโปรดทราบว่าการจัดเก็บข้อมูลจริงนั้น จำกัด อยู่ที่ข้อมูลจริงฉันคิดว่าตัวเลือกของ n นั้นมีพื้นที่เก็บข้อมูลน้อยมากหรือไม่มีเลย ทำให้แน่ใจว่ามันใหญ่พอที่จะเก็บทุกอย่างไว้ได้) แม้แต่การใช้ varchar (สูงสุด) …

2
ฟิลด์“ นอกแถว” ถูกอ่านเมื่อใช้ดัชนีกลุ่มหรือไม่
ฉันรู้ว่าเมื่อVARCHAR(MAX)/NVARCHAR(MAX)มีการใช้คอลัมน์ข้อมูลจะถูกเก็บไว้out of the row- แถวข้อมูลจะมีตัวชี้ไปยังตำแหน่งอื่นที่จัดเก็บ 'ค่ามาก' ฉันมีคำถามต่อไปนี้: อยู่ในแต่ละเขตข้อมูลที่เก็บไว้out of the rowหรือเพียงmaxคน? หากคุณกำลังใช้clustered indexตารางเพื่ออ่านระเบียนทั้งหมดเขตข้อมูลที่เก็บอยู่นอกแถวจะถูกอ่านด้วยหรือไม่ VARCHAR (MAX) หรือ NVARCHAR (MAX) ถือเป็น 'ประเภทค่าขนาดใหญ่' ประเภทค่าขนาดใหญ่มักจะเก็บไว้ที่ 'ออกจากแถว' มันหมายความว่า ...

7
การจัดทำดัชนี MySQL VarChar
ฉันกำลังพยายามจัดทำดัชนีblogentriesฐานข้อมูลของฉันเพื่อประสิทธิภาพที่ดีขึ้น แต่พบปัญหา นี่คือโครงสร้าง: CREATE TABLE IF NOT EXISTS `blogentries` ( `id_id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `title_id` varchar(100) COLLATE latin1_german2_ci NOT NULL, `entry_id` varchar(5000) COLLATE latin1_german2_ci NOT NULL, `date_id` int(11) NOT NULL, PRIMARY KEY (`id_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=271; แบบสอบถามแบบนี้ใช้ดัชนีอย่างถูกต้อง: EXPLAIN SELECT id_id,title_id FROM blogentries …
10 mysql  varchar 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.