ขีด จำกัด สูงสุดของบันทึกสำหรับตารางฐานข้อมูล MySQL คืออะไร ฉันสงสัยเกี่ยวกับฟิลด์การบันทึกอัตโนมัติ จะเกิดอะไรขึ้นถ้าฉันเพิ่มบันทึกหลายล้านรายการ จะจัดการกับสถานการณ์แบบนี้ได้อย่างไร? ขอบคุณ!
ขีด จำกัด สูงสุดของบันทึกสำหรับตารางฐานข้อมูล MySQL คืออะไร ฉันสงสัยเกี่ยวกับฟิลด์การบันทึกอัตโนมัติ จะเกิดอะไรขึ้นถ้าฉันเพิ่มบันทึกหลายล้านรายการ จะจัดการกับสถานการณ์แบบนี้ได้อย่างไร? ขอบคุณ!
คำตอบ:
ชนิด mysql int สามารถทำแถวได้ไม่กี่แถว: http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html
ได้รับการรับรองint
ความคุ้มค่าที่ใหญ่ที่สุดคือ4,294,967,295
ได้รับการรับรองbigint
ความคุ้มค่าที่ใหญ่ที่สุดคือ18,446,744,073,709,551,615
ค่าที่ยิ่งใหญ่ที่สุดของจำนวนเต็มนั้นเกี่ยวข้องกับจำนวนแถวสูงสุดที่คุณสามารถเก็บไว้ในตารางได้เพียงเล็กน้อย
เป็นความจริงที่ว่าถ้าคุณใช้ int หรือ bigint เป็นคีย์หลักของคุณคุณสามารถมีได้หลายแถวตามจำนวนค่าที่ไม่ซ้ำกันในประเภทข้อมูลของคีย์หลักของคุณ แต่คุณไม่ต้องทำให้คีย์หลักเป็นจำนวนเต็ม คุณสามารถทำให้มันเป็น CHAR (100) คุณสามารถประกาศคีย์หลักเหนือคอลัมน์ได้มากกว่าหนึ่งคอลัมน์
มีข้อ จำกัด อื่น ๆ เกี่ยวกับขนาดตารางนอกเหนือจากจำนวนแถว ตัวอย่างเช่นคุณสามารถใช้ระบบปฏิบัติการที่มีข้อ จำกัด ขนาดไฟล์ หรือคุณอาจมีฮาร์ดไดรฟ์ 300GB ที่สามารถเก็บได้เพียง 300 ล้านแถวถ้าแต่ละแถวมีขนาด 1KB
ขีด จำกัด ของขนาดฐานข้อมูลสูงมาก:
http://dev.mysql.com/doc/refman/5.1/en/source-configuration-options.html
เครื่องมือจัดเก็บ MyISAM รองรับ 2 32แถวต่อตาราง แต่คุณสามารถสร้าง MySQL ด้วย--with-big-tables
ตัวเลือกเพื่อให้รองรับได้มากถึง 2 64แถวต่อตาราง
http://dev.mysql.com/doc/refman/5.1/en/innodb-restrictions.html
เอ็นจิ้นการจัดเก็บข้อมูลของ InnoDB ดูเหมือนจะไม่มีข้อ จำกัด เกี่ยวกับจำนวนแถว แต่มีข้อ จำกัด เกี่ยวกับขนาดของตารางที่ 64 เทราไบต์ จำนวนแถวที่พอดีนี้ขึ้นอยู่กับขนาดของแต่ละแถว
ฉันขอแนะนำอย่าลบข้อมูล อย่าพูดว่าถ้าตารางยาวกว่า 1,000 ตัดปลายตาราง จำเป็นต้องมีตรรกะทางธุรกิจจริงในแผนของคุณเช่นผู้ใช้รายนี้ไม่ได้ใช้งานนานเท่าใด ตัวอย่างเช่นถ้ามันมีความยาวมากกว่า 1 ปีให้วางไว้ในตารางอื่น คุณจะให้สิ่งนี้เกิดขึ้นทุกสัปดาห์หรือทุกเดือนในสคริปต์การบำรุงรักษาในช่วงกลางของเวลาที่ช้า
เมื่อคุณพบแถวจำนวนมากในตารางของคุณคุณควรเริ่มแบ่งตารางหรือการแบ่งพาร์ติชันและใส่ข้อมูลเก่าในตารางเก่าตามปีเช่น users_2011_jan, users_2011_feb หรือใช้ตัวเลขสำหรับเดือน จากนั้นเปลี่ยนโปรแกรมของคุณให้ทำงานกับรุ่นนี้ อาจสร้างตารางใหม่โดยใช้ข้อมูลน้อยลงเพื่อสรุปข้อมูลในคอลัมน์ที่น้อยลงแล้วอ้างถึงตารางที่มีการแบ่งพาร์ติชันที่ใหญ่กว่าเมื่อคุณต้องการข้อมูลเพิ่มเติมเช่นเมื่อผู้ใช้ดูโปรไฟล์ของพวกเขา ทั้งหมดนี้ควรได้รับการพิจารณาอย่างรอบคอบดังนั้นในอนาคตไม่แพงเกินกว่าที่จะพิจารณาปัจจัยใหม่ได้ คุณสามารถใส่เฉพาะผู้ใช้ที่มาถึงไซต์ของคุณตลอดเวลาในตารางเดียวและผู้ใช้ที่ไม่เคยมาในชุดของตารางที่เก็บถาวร
ใน InnoDB มีข้อ จำกัด เกี่ยวกับขนาดของตาราง 64 เทราไบต์และขีด จำกัด ขนาดแถวของ MySQL ที่ 65,535 สามารถมี 1,073,741,824 แถว นั่นคือจำนวนระเบียนขั้นต่ำที่ใช้ขีด จำกัด ขนาดแถวสูงสุด อย่างไรก็ตามสามารถเพิ่มระเบียนได้มากขึ้นหากขนาดแถวมีขนาดเล็กลง
ตามส่วน Scalability and Limits ในhttp://dev.mysql.com/doc/refman/5.6/en/features.html , MySQL รองรับฐานข้อมูลขนาดใหญ่ พวกเขาใช้ MySQL Server กับฐานข้อมูลที่มี 50 ล้านบันทึก ผู้ใช้บางคนใช้เซิร์ฟเวอร์ MySQL ที่มี 200,000 ตารางและประมาณ 5,000,000,000 แถว
The maximum row size for a given table is determined by several factors:
การเป็นตัวแทนภายในของตาราง MySQL มีขีด จำกัด ขนาดแถวสูงสุด 65,535 ไบต์แม้ว่าเอ็นจิ้นการจัดเก็บจะสามารถรองรับแถวขนาดใหญ่ได้ คอลัมน์ BLOB และ TEXT สนับสนุนขนาด 9 ถึง 12 ไบต์ต่อขนาด จำกัด ของแถวเนื่องจากเนื้อหาจะถูกจัดเก็บแยกต่างหากจากส่วนที่เหลือของแถว
ขนาดแถวสูงสุดสำหรับตาราง InnoDB ซึ่งนำไปใช้กับข้อมูลที่เก็บไว้ภายในหน้าฐานข้อมูลน้อยกว่าครึ่งหน้าเล็กน้อย ตัวอย่างเช่นขนาดแถวสูงสุดคือน้อยกว่า 8KB เล็กน้อยสำหรับขนาดหน้าเริ่มต้น 16KB InnoDB ซึ่งกำหนดโดยตัวเลือกการกำหนดค่า innodb_page_size “ ข้อ จำกัด ของ InnoDB Tables ”
ลิงค์ http://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html
ขีด จำกัด ขนาดแถว
ขนาดแถวสูงสุดสำหรับตารางที่กำหนดถูกกำหนดโดยปัจจัยหลายประการ:
การเป็นตัวแทนภายในของตาราง MySQL มีขีด จำกัด ขนาดแถวสูงสุด 65,535 ไบต์แม้ว่าเอ็นจิ้นการจัดเก็บจะสามารถรองรับแถวขนาดใหญ่ได้ คอลัมน์ BLOB และ TEXT สนับสนุนขนาด 9 ถึง 12 ไบต์ต่อขนาด จำกัด ของแถวเนื่องจากเนื้อหาจะถูกจัดเก็บแยกต่างหากจากส่วนที่เหลือของแถว
ขนาดแถวสูงสุดสำหรับตาราง InnoDB ซึ่งใช้กับข้อมูลที่เก็บไว้ภายในหน้าฐานข้อมูลน้อยกว่าครึ่งหน้าเล็กน้อยสำหรับการตั้งค่า 4KB, 8KB, 16KB, 16KB และ 32KB เล็กน้อย ตัวอย่างเช่นขนาดแถวสูงสุดคือน้อยกว่า 8KB เล็กน้อยสำหรับขนาดหน้าเริ่มต้น 16KB InnoDB สำหรับหน้า 64KB ขนาดแถวสูงสุดคือน้อยกว่า 16KB เล็กน้อย ดูหัวข้อ 15.8.8“ ข้อ จำกัด บนตาราง InnoDB”
หากแถวที่มีคอลัมน์ที่มีความยาวแปรผันเกินขนาดแถวสูงสุดของ InnoDB InnoDB จะเลือกคอลัมน์ที่มีความยาวผันแปรสำหรับการจัดเก็บนอกหน้าจนกว่าแถวจะพอดีภายในขีด จำกัด ขนาดของแถว InnoDB จำนวนข้อมูลที่เก็บไว้ในเครื่องสำหรับคอลัมน์ที่มีความยาวผันแปรได้ซึ่งจัดเก็บอยู่นอกหน้าจะแตกต่างกันไปตามรูปแบบแถว สำหรับข้อมูลเพิ่มเติมดูหัวข้อ 15.11“ รูปแบบการจัดเก็บแถวและรูปแบบแถวของ InnoDB”
รูปแบบการจัดเก็บที่แตกต่างกันใช้จำนวนส่วนหัวของหน้าและข้อมูลตัวอย่างที่แตกต่างกันซึ่งมีผลต่อจำนวนที่เก็บข้อมูลสำหรับแถว
สำหรับข้อมูลเกี่ยวกับรูปแบบแถว InnoDB ดูหัวข้อ 15.11“ รูปแบบแถวเก็บและแถวของ InnoDB” และส่วน 15.8.3“ โครงสร้างแถวทางกายภาพของตาราง InnoDB”
สำหรับข้อมูลเกี่ยวกับรูปแบบการจัดเก็บ MyISAM ดูส่วน 16.2.3“ รูปแบบการจัดเก็บตาราง MyISAM”
http://dev.mysql.com/doc/refman/5.7/en/innodb-restrictions.html
ไม่มีขีด จำกัด ขึ้นอยู่กับหน่วยความจำว่างและขนาดไฟล์สูงสุดของระบบเท่านั้น แต่นั่นไม่ได้หมายความว่าคุณไม่ควรใช้มาตรการป้องกันในการจัดการหน่วยความจำในฐานข้อมูลของคุณ สร้างสคริปต์ที่สามารถลบแถวที่ไม่มีการใช้งานได้เสมอหรือจะไม่เก็บจำนวนแถวทั้งหมดในรูปใดรูปหนึ่งพัน