MySQL Table Types & Storage Engines
Trong bài này chúng ta sẽ tìm hiểu một số loại table trong mysql và storage engines. Việc nắm từng loại table này giúp bạn sử dụng một cách hiệu quả về tính performance, nghĩa là tối ưu hóa về tốc độ. Chúng ta sẽ tìm hiểu các loại table hoặc storage engines sau:
- MyISAM
- InnoDB
- MERGE
- MEMORY (HEAP)
- ARCHIVE
- CSV
- FEDERATED
Mỗi loại có một ưu điểm và nhược điểm khác nhau, điều này rất quan trọng nên nếu bạn tận dụng được các ưu điểm đó thì ứng dụng của bạn sẽ thực sự rất tối ưu cơ sở dữ liệu. Bây giờ ta sẽ tìm hiểu từng loại nhé.
1. Các kiểu table trong MySQL
Sau đây là chi tiết về các kiểu table trong MySQL.
MyISAM
MyISAM là phần mở rộng cho công cụ lưu trữ ISAM cũ, các bảng được lưu trữ dưới dạng MyISAM được tối ưu hóa cho tốc độ nén. Kích thước của MyISAM có thẻ lên tới 256TB, rất là lớn phải không các bạn. Ngoài ra bảng kiểu MyISAM có thể được nén và chỉ đọc để tăng tính truy vấn lấy dữ liệu. Lúc MYSQL khởi động sẽ kiểm tra các bảng có kiểu MyISAM nếu bị lỗi thì nó sẽ fix lôi luôn, nên nếu ban lưu trữ cách này sẽ không an toàn.
Bài viết này được đăng tại [free tuts .net]
Thông thường các bảng như tin tức, chuyên mục tin tức, sản phẩm, ... thì chúng ta sử dụng kiểu MyISAM để tốc độ truy vấn nó nhanh hơn. Các phiên bản bé hơn 5.5 thì MyISAM là kiểu bảng mặc định khi bạn tạo mới một table, kể từ bản 5.5 trở đi thì mặc định nó sẽ lấy kiểu InnoDB.
InnoDB
Các table InnoDB có đầy đủ các tính năng ACID-compliant và transaction và nó cũng được tối ưu hóa cho tính perormance. Bảng InnorDB hỗ trợ khóa ngoại (Foreign Key), commit, rollback trong transaction. Kích thước của InnoDB có thể lên tới 64TB, con số này khá nhỏ so với bảng MyISAM phải không nào.
Cũng như MyISAM lúc MySQL khởi động nó cũng kiểm tra các table nếu có lỗi thì sẽ báo hoặc tự fix (nếu cần thiết).
MERGE
Bảng MERGE là bảng ảo, là sự kết hợp của nhiều bảng MyISAM có cấu trúc tương tự và đưa chúng vào một bảng duy nhất, chính vì vậy kiểu MERGE ta có thể hiểu nó có quy tắc giống như MyISAM . Các bảng MERGE không có chỉ số indexes riêng của mình mà nó sử dụng indexes của các bảng con.
Sử dụng bảng MERGE bạn có thể tăng tốc độ hiệu suất trong truy vấn tham gia nhiều bảng. MYSQL chỉ cho phép bạn thực hiện các thao tác SELECT
, INSERT
, UPDATE
, DELETE
trên bảng đó, nếu bạn DROP một table nằm trong danh sách table của bảng MERGE thì chỉ có các đặc điểm riêng của nó bị loại bỏ và các bảng bên dưới sẽ không bị ảnh hưởng.
Memory
Bảng memory được lưu trữ trong bộ nhớ và sử dụng chỉ số băm để có được tốc độ nhanh hơn các bảng MyISAM. Vòng đời sống của dữ liệu phụ thuộc vào thời gian sống của Database Server. Ta có thể hiểu store engine memory giống như bộ nhớ HEAP.
Archive
Archive là công cụ lưu trữ cho phép bạn lưu trữ số lượng lớn các bản ghi mà mục đích chỉ để lưu trữ và được chuyển sang định dạng nén để giảm bớt không gian lưu trữ. Nó sử dụng thư viện zlib để nén dữ liệu.
Các bảng lưu trữ chỉ cho phép thực hiện hai thao tác là INSERT
và SELECT
và nó không hỗ trợ chỉ mục indexes, chính vì vậy khi bạn thực hiện lệnh select nó sẽ đọc toàn bộ bảng nên tốc độ sẽ chậm.
CSV
CSV là phần mở rộng của Excel phải không nhỉ? Trong PHP thường ta sử dụng phần header có phần mở rộng là CSV để chuyển thành file Excel. Nhưng trong MYSQL thì với kiểu này nó sẽ lưu các fields dữ liệu sẽ được ngăn cách nhau bởi dấu phẩy, đây cũng là cách lưu trữ rất giống với NO-SQL
CSV table không hỗ trợ dữ liệu NULL và khi bạn truy vấn đọc (select) thì nó sẽ duyệt toàn bộ bảng giống như Archive.
FEDERATED
FEDERATED storage engine cho phép bạn quản lý dữ liệu máy chủ từ xa mà không cần sử dụng cluster. Các table Federated local sẽ không có dữ liệu mà khi bạn truy vấn dữ liệu thì dữ liệu sẽ được kéo về bảng này.
2. Lời kết
Thông thường chúng ta hay sử dụng hai loại là MyISAM hoặc InnoDB để xây dựng các ứng dụng. Việc phân biệt các loại table engine này sẽ giúp bạn có thể Design mô hình database và sử dụng chúng một cách hiệu quả hơn. Còn nếu bạn là newbie đang học MYSQL thì có thể đọc sơ qua và lưu lại đến lúc cần thì xem chứ hiện tại có lẽ bạn cũng chưa thể thực hành được, ngay cả tôi cũng chưa sử dụng hết các loại table kia.