โดยทั่วไปคุณจะใช้จำนวนเต็มมากกว่า varchars เพราะใช้พื้นที่น้อยกว่ามีรูปแบบการเรียงที่เข้าใจได้ง่ายในการจัดทำดัชนีเป็นต้นจำนวนเต็มเป็นประเภทข้อมูลตามธรรมชาติของ CPU ดังนั้นประสิทธิภาพจึงเหมาะสมที่สุด โดยทั่วไปแล้วจำนวนเต็มคือ 4 ไบต์เทียบเท่ากับเพียง 4 ตัวอักษรใน varchar (ไม่ใช่ยูนิโค้ด)
หากคุณกังวลว่าพื้นที่ในประเภท INT จะหมดให้ลองใช้ BIGINT ซึ่งจะให้ตัวเลข 8 ไบต์ ข้อ จำกัด ในเรื่องนี้ค่อนข้างใหญ่และคุณอาจหมดพื้นที่ดิสก์ก่อนที่คุณจะถึงขีด จำกัด ของเรคคอร์ด :-) ประสิทธิภาพของ BIGINT ก็จะดีเช่นกันโดยเฉพาะอย่างยิ่งเมื่อเซิร์ฟเวอร์จำนวนมากตอนนี้ 64- บิตเช่นกัน .
คำตอบสำหรับคำถามแรกของคุณเกี่ยวกับสิ่งที่เกิดขึ้นเมื่อคุณหมดใน INT ไม่ใช่เรื่องง่ายโดยเฉพาะอย่างยิ่งที่คุณพูดโดยไม่เปลี่ยนประเภทข้อมูลเป็น BIGINT โดยทั่วไปคุณสามารถทำอะไรได้ไม่มากและสิ่งที่คุณสามารถทำได้นั้นมี จำกัด มากโดยธรรมชาติของข้อมูลในฐานข้อมูลของคุณ เร็กคอร์ดใดที่เป็นข้อมูลสำคัญต่างประเทศสำหรับข้อมูลนี้ คุณยังต้องการข้อมูลทั้งหมดในตารางนั้นและระเบียนที่เกี่ยวข้องหรือไม่ บนสมมติฐานที่ว่าคุณสามารถเก็บถาวรข้อมูลเริ่มต้นจำนวนมาก (และข้อมูลที่เกี่ยวข้อง) จากนั้นสิ่งเดียวที่ฉันสามารถแนะนำคือย้ายข้อมูลออกจากตาราง (สมมติว่า 1 ถึง X ล้านระเบียนแรก) จากนั้น การรีเซ็ตเมล็ดพันธุ์เอกลักษณ์เป็น 1 มีเหตุผลหลายประเภทแม้ว่าฉันจะไม่แนะนำ - เช่นมีหลายบิตของรหัสที่ฉันได้เห็นว่าทำสิ่งต่าง ๆ เช่นตรวจสอบค่าสูงสุดของเขตข้อมูล id เพื่อดูสิ่งที่เพิ่งถูกเพิ่มเข้ามาและนั่นจะไม่ทำงาน (และไม่ควรทำ) นอกจากนี้ผู้คนสมมติว่าระเบียน N ถูกสร้างขึ้นก่อน N + 1 ไม่มีคำตอบที่ง่ายฉันคิดว่า
ในที่สุดฉันไม่รู้เกี่ยวกับ MySQL แต่ SQL Server จะให้ข้อผิดพลาดมากเกินไปหากคุณถึงขีด จำกัด