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

Làm cách nào để chọn kiểu dữ liệu được tối ưu hóa cho các cột [cụ thể innodb]?

Tóm tắt ngắn gọn:

(chỉ là ý kiến ​​của tôi)

  1. cho địa chỉ email - VARCHAR(255)
  2. cho tên người dùng - VARCHAR(100) hoặc VARCHAR(255)
  3. 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)
  4. số điện thoại - INT hoặc VARCHAR 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)
  5. bài viết - TEXT
  6. ngày - DATE hoặc DATETIME (chắc chắn bao gồm thời gian cho những thứ như bài đăng hoặc email)
  7. tiền - DECIMAL(11,2)
  8. 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. VARCHARTEXT 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 VARCHARTEXT , 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:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách xóa bản ghi MySQL sau một thời gian nhất định

  2. Nhận đầu ra cơ sở dữ liệu MySQL qua PHP sang XML

  3. Mysql - Giúp tôi thay đổi truy vấn tìm kiếm này để nhận được kết quả mong muốn

  4. Loại bỏ truy vấn con cho giá trị số trung bình

  5. Điều gì sẽ ngăn tôi kết nối với máy chủ MySQL trên AWS RDS từ máy ảo AWS EC2?