Tôi khuyên bạn nên xem xét loại truy vấn bạn sẽ chạy để quyết định định dạng nào bạn áp dụng.
Chỉ khi bạn cần rút ra hoặc so sánh các octet riêng lẻ, bạn sẽ phải cân nhắc việc tách chúng thành các trường riêng biệt.
Nếu không, hãy lưu trữ nó dưới dạng số nguyên 4 byte. Điều đó cũng có phần thưởng là cho phép bạn sử dụng MySQL tích hợp sẵn INET_ATON ()
và INET_NTOA ()
các chức năng.
Hiệu suất so với Không gian
Bộ nhớ:
Nếu bạn chỉ hỗ trợ địa chỉ IPv4 thì kiểu dữ liệu của bạn trong MySQL có thể là UNSIGNED INT
chỉ sử dụng 4 byte bộ nhớ.
Để lưu trữ các octet riêng lẻ, bạn chỉ cần sử dụng UNSIGNED TINYINT
kiểu dữ liệu, không phải SMALLINTS
, sẽ sử dụng hết 1 byte mỗi bộ nhớ.
Cả hai phương pháp sẽ sử dụng bộ nhớ tương tự, có lẽ nhiều hơn một chút cho các trường riêng biệt cho một số chi phí.
Thông tin thêm:
- Tổng quan về Loại số
- Loại số nguyên (Giá trị chính xác) - INTEGER, INT , SMALLINT, TINYINT, MEDIUMINT, BIGINT
Hiệu suất:
Sử dụng một trường duy nhất sẽ mang lại hiệu suất tốt hơn nhiều, đó là một so sánh duy nhất thay vì 4. Bạn đã đề cập rằng bạn sẽ chỉ chạy các truy vấn đối với toàn bộ địa chỉ IP, vì vậy không cần phải giữ các octet riêng biệt. Sử dụng INET_ *
các hàm của MySQL sẽ thực hiện chuyển đổi giữa các biểu diễn văn bản và số nguyên một lần để so sánh.