Trong bài hướng dẫn này, chúng ta sẽ cùng nhau tìm hiểu một số loại table trong mysql và mysql storage engines. Việc nắm rõ từng loại table này giúp bạn sử dụng một cách hiệu quả mysql để tối ưu hóa về tốc độ. Chúng ta sẽ tìm hiểu các loại table / mysql storage engines sau:

  • MyISAM
  • InnoDB
  • MERGE
  • ARCHIVE
  • CSV
  • FEDERATED
  • MEMORY (HEAP)

Mỗi loại table sẽ có một ưu điểm và nhược điểm khác nhau, nắm được điều này rất quan trọng vì 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ự được tối ưu về mặt cơ sở dữ liệu. Nào, giờ cùng nhau tìm hiểu từng loại table/mysql storage engine nhé.

1. Các kiểu table trong MySQL

1.1. MyISAM

MyISAM là phần mở rộng cho công cụ lưu trữ ISAM. Đối với MyISAM các bảng được tối ưu hóa cho tốc độ nén. Kích thước của MyISAM có thể lưu trữ lên tới 256TB, con số vô cùng lớn. Table kiểu MyISAM được nén và chỉ đọc để tăng tốc độ truy vấn lấy dữ liệu. Tuy nhiên, đối với MyISAM mỗi lần khởi động, hệ thống tự động kiểm tra lỗi và tự động fix lỗi đối với các bảng bị lỗi nên rủi ro bị thay đổi/khôi phục dữ liệu cao nên các ứng dụng cần độ tin cậy dữ liệu cao sẽ không phù hợp.

Các ứng dụng như tin tức, chuyên mục tin tức, sản phẩm, … chúng ta nên sử dụng kiểu MyISAM để tốc độ truy vấn.

1.2. InnoDB

Các table kiểu InnoDB có đầy đủ các tính năng ACID-compliant, Transaction và được tối ưu về mặt tốc độ. Bảng kiểu InnorDB có hỗ trợ khóa ngoại (Foreign Key). Đảm bảo toàn vẹn transaction sử dụng commit, rollback trong transaction. Kích thước lưu trữ của bảng kiểu InnoDB có thể lên tới 64TB, con số này khá nhỏ so với bảng MyISAM tuy nhiên cũng không phải là con số nhỏ.

Giống như MyISAM lúc MySQL tiến hành khởi động, hệ thống cũng tự động kiểm tra các table nếu có lỗi thì sẽ báo cáo hoặc tự fix (nếu cần thiết). 

1.3. MERGE

Bảng kiểu MERGE là bảng ảo, nó là sự kết hợp của nhiều bảng kiểu MyISAM có cấu trúc tương tự và kết hợp(merge) vào một bảng duy nhất.Vì vậy kiểu MERGE về cơ bản nó là kiểu MyISAM . Các bảng MERGE không có chỉ số indexes riêng của bảng mà nó sử dụng indexes của các bảng con.

Do bảng MERGE được tối ưu về tốc độ nên thể tăng tốc độ hiệu suất trong truy vấn tham gia nhiều bảng. Đối với kiểu merge, MYSQL chỉ cho phép thực hiện các thao tác SELECT, INSERT, UPDATE, DELETE trên bảng. Tuy nhiên, có thể DROP một bảng con ra khỏi nó mà không ảnh hưởng đến các bảng còn lại.

1.4. Memory

Bảng kiểu Memory được tổ chức và lưu trữ trong bộ nhớ(HEAP) và sử dụng chỉ số băm(hash index) để có được tốc độ nhanh hơn các bảng MyISAM. Thời gian tồn tại của dữ liệu phụ thuộc vào thời gian tồn tại của Database Server.

Kiểu bảng này chỉ sử dụng đối với các ứng dụng có thời gian lữu trữ dữ liệu ngắn tuy nhiên cần tốc độ truy cập cực kì cao như cache,…

1.5. Archive

Bảng kiểu Archive là bảng sử dụng để lưu trữ  số lượng lớn các bản ghi được nén lại để giảm bớt không gian lưu trữ. Bảng kiểu Archive sử dụng thư viện zlib để nén dữ liệu.

Các bảng Archive  chỉ cho phép thực hiện hai thao tác là INSERTvà SELECT, không hỗ trợ chỉ mục indexes vì đó nên việc truy cập dữ liệu sẽ chậm. Bảng kiểu Archive  thông thường sử dụng cho mục đích lưu trữ dữ liệu cho các mục đích như backup, lưu trữ.

1.6. CSV

CSV là  kiểu lưu trữ mà các fields dữ liệu sẽ được phân tách, ngăn cách nhau bởi dấu phẩy. Tư duy và cách lưu trữ rất giống với NO-SQL.

Tuy nhiên 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 nên tốc độ khá chậm.

1.7. FEDERATED

FEDERATED storage engine cho phép quản lý dữ liệu máy chủ từ xa(remote database) mà không cần sử dụng đến 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 lấy về từ các bảng lưu trữ dữ liệu thực.

2. KẾT LUẬN

Thông thường chúng ta hay sử dụng hai kiểu bảng là MyISAM hoặc InnoDB để xây dựng các ứng dụng. Việc nắm rõ và phân biệt được các loại table engine này sẽ giúp bạn có thể thiết kế được mô hình database và sử dụng chúng một cách hiệu quả và phù hợp với ứng dụng.

LEAVE A REPLY

Please enter your comment!
Please enter your name here