Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Có bất lợi nào khi sử dụng varchar chung (255) cho tất cả các trường dựa trên văn bản không?

Trong bộ nhớ, VARCHAR(255) đủ thông minh để chỉ lưu trữ độ dài bạn cần trên một hàng nhất định, không giống như CHAR(255) sẽ luôn lưu trữ 255 ký tự.

Nhưng vì bạn đã gắn thẻ câu hỏi này với MySQL, tôi sẽ đề cập đến một mẹo dành riêng cho MySQL:vì các hàng được sao chép từ lớp công cụ lưu trữ sang lớp SQL, VARCHAR các trường được chuyển đổi thành CHAR để đạt được lợi thế khi làm việc với các hàng có chiều rộng cố định. Vì vậy, các chuỗi trong bộ nhớ trở nên được đệm đến độ dài tối đa trong số VARCHAR đã khai báo của bạn cột.

Khi truy vấn của bạn hoàn toàn tạo ra một bảng tạm thời, chẳng hạn như trong khi sắp xếp hoặc GROUP BY , điều này có thể sử dụng nhiều bộ nhớ. Nếu bạn sử dụng nhiều VARCHAR(255) các trường cho dữ liệu không cần quá dài, điều này có thể làm cho bảng tạm thời rất lớn.

Bạn cũng có thể muốn biết rằng hành vi "đệm ra" này có nghĩa là một chuỗi được khai báo với bộ ký tự utf8 đệm ra ba byte cho mỗi ký tự ngay cả đối với chuỗi bạn lưu trữ với nội dung một byte (ví dụ:ký tự ascii hoặc latin1). Và tương tự như vậy, bộ ký tự utf8mb4 khiến chuỗi thêm vào bốn byte cho mỗi ký tự trong bộ nhớ.

Vì vậy, một VARCHAR(255) trong utf8, lưu trữ một chuỗi ngắn như "Không có ý kiến" chiếm 11 byte trên đĩa (mười ký tự ký tự thấp hơn, cộng thêm một byte cho độ dài) nhưng nó chiếm 765 byte trong bộ nhớ và do đó trong bảng tạm thời hoặc kết quả được sắp xếp.

Tôi đã giúp những người dùng MySQL vô tình tạo bảng tạm thời 1,5GB thường xuyên và làm đầy không gian đĩa của họ. Họ có rất nhiều VARCHAR(255) trong thực tế, các cột được lưu trữ các chuỗi rất ngắn.

Tốt nhất bạn nên xác định cột dựa trên loại dữ liệu mà bạn định lưu trữ. Nó có lợi ích để thực thi các ràng buộc liên quan đến ứng dụng, như những người khác đã đề cập. Nhưng nó có những lợi ích vật lý để tránh lãng phí bộ nhớ mà tôi đã mô tả ở trên.

Tất nhiên, thật khó để biết địa chỉ bưu điện dài nhất là gì, đó là lý do tại sao nhiều người chọn VARCHAR dài chắc chắn là lâu hơn bất kỳ địa chỉ nào. Và 255 là thông lệ vì nó là độ dài tối đa của VARCHAR mà độ dài có thể được mã hóa bằng một byte. Nó cũng là VARCHAR tối đa độ dài trong MySQL cũ hơn 5.0.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để biết bảng MySQL được cập nhật lần cuối khi nào?

  2. Ví dụ về CURTIME () - MySQL

  3. Quay lại sao chép truyền thống từ GTID

  4. Làm cách nào để viết SQL cho một bảng có cùng tên với một từ khóa được bảo vệ trong MySql?

  5. Cách hoạt động của toán tử LIKE trong MySQL