Tóm tắt ngắn gọn:
(chỉ là ý kiến của tôi)
- cho địa chỉ email -
VARCHAR(255)
- cho tên người dùng -
VARCHAR(100)
hoặcVARCHAR(255)
- cho id_username - sử dụng
INT
(trừ khi bạn có kế hoạch về hơn 2 tỷ người dùng trong hệ thống của mình) - số điện thoại -
INT
hoặcVARCHAR
hoặc có thểCHAR
(tùy thuộc vào việc bạn có muốn lưu trữ định dạng hay không) - bài viết -
TEXT
- ngày -
DATE
hoặcDATETIME
(chắc chắn bao gồm thời gian cho những thứ như bài đăng hoặc email) - tiền -
DECIMAL(11,2)
- misc - xem bên dưới
Đối với việc sử dụng InnoDB vì VARCHAR
được cho là nhanh hơn, tôi sẽ không lo lắng về điều đó, hoặc tốc độ nói chung. Sử dụng InnoDB vì bạn cần thực hiện các giao dịch và / hoặc bạn muốn sử dụng các ràng buộc khóa ngoại (FK) để đảm bảo tính toàn vẹn của dữ liệu. Ngoài ra, InnoDB sử dụng khóa mức hàng trong khi MyISAM chỉ sử dụng khóa mức bảng. Do đó, InnoDB có thể xử lý các mức đồng thời cao hơn tốt hơn MyISAM. Sử dụng MyISAM để sử dụng các chỉ mục toàn văn bản và tiết kiệm chi phí hơn một chút.
Quan trọng hơn đối với tốc độ hơn là loại công cụ:đặt các chỉ mục trên các cột mà bạn cần tìm kiếm một cách nhanh chóng. Luôn đặt chỉ mục trên các cột ID / PK của bạn, chẳng hạn như id_username mà tôi đã đề cập.
Chi tiết khác:
Đây là một loạt câu hỏi về kiểu dữ liệu MySQL và thiết kế cơ sở dữ liệu (cảnh báo, nhiều hơn những gì bạn yêu cầu):
Và một số câu hỏi về thời điểm sử dụng công cụ InnoDB:
Tôi chỉ sử dụng tinyint
cho hầu hết mọi thứ (nghiêm túc).
Chỉnh sửa - Cách lưu trữ "bài đăng:"
Dưới đây là một số liên kết với nhiều chi tiết hơn, nhưng đây là phiên bản ngắn. Để lưu trữ "bài đăng", bạn cần có chỗ cho một chuỗi văn bản dài. CHAR
độ dài tối đa là 255, vì vậy đó không phải là một tùy chọn và tất nhiên là CHAR
sẽ lãng phí các ký tự không sử dụng so với VARCHAR
, là độ dài thay đổi CHAR
.
Trước MySQL 5.0.3, VARCHAR
độ dài tối đa là 255, vì vậy bạn sẽ được để lại với TEXT
. Tuy nhiên, trong các phiên bản MySQL mới hơn, bạn có thể sử dụng VARCHAR
hoặc TEXT
. Sự lựa chọn phụ thuộc vào sở thích, nhưng có một số khác biệt. VARCHAR
và TEXT
chiều dài tối đa hiện là cả 65.535, nhưng bạn có thể đặt chiều dài tối đa của mình trên VARCHAR
. Giả sử bạn nghĩ rằng bài đăng của mình sẽ chỉ cần tối đa 2000, bạn có thể đặt VARCHAR(2000)
. Nếu bạn từng đạt đến giới hạn, bạn có thể ALTER
bạn đặt bảng sau và chuyển nó đến VARCHAR(3000)
. Mặt khác, TEXT
thực sự lưu trữ dữ liệu của nó trong một BLOB
(1). Tôi nghe nói rằng có thể có sự khác biệt về hiệu suất giữa VARCHAR
và TEXT
, nhưng tôi chưa thấy bất kỳ bằng chứng nào, vì vậy bạn có thể muốn xem xét thêm nhưng bạn luôn có thể thay đổi chi tiết nhỏ đó trong tương lai.
Quan trọng hơn, tìm kiếm cột "bài đăng" này bằng Chỉ mục toàn văn bản thay vì LIKE
sẽ nhanh hơn nhiều (2). Tuy nhiên, bạn phải sử dụng công cụ MyISAM để sử dụng chỉ mục toàn văn vì InnoDB không hỗ trợ nó . Trong cơ sở dữ liệu MySQL, bạn có thể có một hỗn hợp các công cụ không đồng nhất cho mỗi bảng, vì vậy bạn chỉ cần đặt bảng "bài viết" của mình sử dụng MyISAM. Tuy nhiên, nếu bạn thực sự cần "bài đăng" để sử dụng InnoDB (cho các giao dịch), thì hãy thiết lập trình kích hoạt để cập nhật bản sao MyISAM của bảng "bài đăng" của bạn và sử dụng bản sao MyISAM cho tất cả các tìm kiếm toàn văn của bạn.
Xem phần dưới để biết một số trích dẫn hữu ích.
Cuối cùng, đây là một bài đăng tuyệt vời về ưu và nhược điểm của VARCHAR so với TEXT. Nó cũng nói về vấn đề hiệu suất: