Nói chung, bạn sẽ sử dụng các số nguyên thay vì varchars vì chúng tiêu tốn ít dung lượng hơn, có kiểu sắp xếp được hiểu rõ là nhanh để lập chỉ mục, vv Các số nguyên là kiểu dữ liệu tự nhiên của CPU và do đó hiệu suất nói chung là tối ưu. Thông thường một số nguyên là 4 byte, tương đương với chỉ 4 ký tự trong một varchar (không phải unicode).
Nếu bạn lo lắng về việc hết dung lượng với loại INT, hãy thử BIGINT, cung cấp cho bạn các số 8 byte. Giới hạn về điều này là khá lớn và có lẽ bạn sẽ hết dung lượng đĩa trước khi bạn đạt đến giới hạn hồ sơ đó :-) Hiệu suất của BIGINT cũng sẽ rất tốt, đặc biệt là nhiều máy chủ hiện nay cũng 64 bit .
Câu trả lời cho phần đầu tiên của câu hỏi của bạn về những gì xảy ra khi bạn hết INTs không đơn giản, đặc biệt như bạn đã nói mà không thay đổi kiểu dữ liệu thành BIGINT. Về cơ bản, bạn không thể làm được gì nhiều và những gì bạn có thể làm bị hạn chế rất nhiều bởi bản chất của dữ liệu trong cơ sở dữ liệu của bạn. Hồ sơ nào là khóa ngoại đối với dữ liệu này? Bạn vẫn cần tất cả dữ liệu trong bảng đó và các hồ sơ liên quan? Giả định rằng bạn có thể lưu trữ rất nhiều dữ liệu ban đầu (và dữ liệu liên quan của nó), thì điều duy nhất tôi có thể đề xuất là di chuyển dữ liệu ra khỏi bảng (giả sử là 1 đến X triệu bản ghi đầu tiên), sau đó Đặt lại hạt giống nhận dạng thành 1. Có tất cả các loại lý do mặc dù tôi không đề xuất nó - ví dụ: có nhiều đoạn mã tôi đã thấy làm những việc như kiểm tra giá trị tối đa của trường id, để xem những gì vừa được thêm vào, và điều đó sẽ không hoạt động (và không nên thực hiện). Ngoài ra, mọi người cho rằng bản ghi N đã được tạo trước N + 1. Không có câu trả lời dễ dàng tôi nghĩ.
Cuối cùng, tôi không biết về MySQL, nhưng SQL Server sẽ báo lỗi tràn nếu bạn đạt đến giới hạn.