InnoDB là gì? So sánh InnoDB & MyISAM trong MySQL

InnoDB là gì? So sánh InnoDB & MyISAM trong MySQL
4.6/5 - (18 bình chọn)

InnoDB là gì? So sánh InnoDB & MyISAM trong MySQL

InnoDB là gì?

MySQL hỗ trợ nhiều công cụ lưu trữ cho bảng xác định hoạt động bên trong và hỗ trợ các tính năng khác nhau của bảng. Một số công cụ lưu trữ được hỗ trợ bởi MySQL bao gồm InnoDB, MyISAM, Memory, CSV, Merge, Archive, Federated, Blackhole, và Example. Trong số đó, Innodb là công cụ lưu trữ được sử dụng rộng rãi nhất, trong khi MyISAM là một trong những công cụ lưu trữ ban đầu được sử dụng trong một số bảng nội bộ được sử dụng để thao tác cơ sở dữ liệu MySQL thuộc cơ sở dữ liệu information_schema và MySQL.

Công cụ MyISAM là không giao dịch và có khóa cấp bảng trong khi InnoDB là công cụ lưu trữ giao dịch có tính năng khóa cấp hàng. Công cụ lưu trữ InnoDB cung cấp hiệu suất tuyệt vời và cân bằng độ tin cậy và là một trong những công cụ lưu trữ được ưu tiên và đề xuất bởi oracle. Trong bài viết này, wikimaytinh sẽ giúp bạn tìm hiểu về công cụ lưu trữ InnoDB của MySQL, các tính năng được hỗ trợ, cách làm việc của công cụ lưu trữ InnoDB.

Ưu điểm của InnoDB

Có rất nhiều ưu điểm của công cụ lưu trữ InnoDB, trong số đó có một số ưu điểm được liệt kê dưới đây:

  • Tất cả các câu lệnh và hoạt động của ngôn ngữ thao tác dữ liệu hỗ trợ các thuộc tính ACID (Nguyên tử, Nhất quán, Cô lập và Độ bền) của giao dịch và các tính năng giao dịch khác của hỗ trợ khôi phục, cam kết và khôi phục sự cố để bảo mật dữ liệu người dùng.
  • Khả năng truy cập đồng thời của nhiều người dùng với hiệu suất cao và số lần đọc nhất quán theo kiểu oracle đạt được nhờ tính năng khóa cấp độ hàng của công cụ lưu trữ InnoDB.
  • Dữ liệu được sắp xếp theo cách như vậy trên đĩa sẽ dẫn đến việc tối ưu hóa việc truy xuất dữ liệu khi sử dụng khóa chính trong truy vấn của bạn. Chỉ mục nhóm được xác định trên khóa chính của bảng InnoDB dẫn đến việc tổ chức dữ liệu theo cách sẽ giảm thiểu thao tác nhập / xuất cho các tra cứu khóa chính.
  • Để tránh sự mâu thuẫn trong các bảng có liên quan và phụ thuộc vào nhau, công cụ lưu trữ InnoDB hỗ trợ việc sử dụng các khóa ngoại giúp thực hiện các thao tác cập nhật, chèn và xóa nhất quán và giúp duy trì tính toàn vẹn và nhất quán trong nội dung của bảng kho dữ liệu.

Tính năng của InnoDB

Các tính năng của InnoDB bao gồm chỉ mục B-tree, Sao lưu / phục hồi điểm trong thời gian, Chỉ mục được phân cụm, Dữ liệu được nén, Bộ nhớ đệm dữ liệu, Dữ liệu được mã hóa, Hỗ trợ khóa ngoại, Chỉ mục tìm kiếm toàn văn bản cho MySQL 5.6 và các phiên bản mới hơn, Hỗ trợ kiểu dữ liệu không gian địa lý , Hỗ trợ lập chỉ mục không gian địa lý cho MySQL 5.7 và các phiên bản mới hơn, Bộ đệm chỉ mục, Khóa chi tiết ở cấp hàng, MVCC, Hỗ trợ sao chép, Giới hạn lưu trữ lên đến 64TB, Giao dịch, Cập nhật thống kê cho từ điển dữ liệu. Đối với tính năng Chỉ mục băm thích ứng, InnoDB sử dụng chỉ mục băm bên trong nhưng chỉ mục băm không được hỗ trợ cho các bảng InnoDB trong khi thao tác.

Ví dụ về InnoDB

Bất cứ khi nào chúng ta tạo bảng bằng cách sử dụng câu lệnh tạo bảng trong phiên bản MySQL 5.5 trở lên, công cụ lưu trữ mặc định của bảng được tạo luôn là Innodb trong khi đối với các phiên bản trước MySQL 5.5, MyISAM là công cụ lưu trữ mặc định cho bảng. Chúng ta có thể đề cập đến công cụ lưu trữ của bảng trong khi tạo nó bằng cách sử dụng mệnh đề ENGINE = nếu chúng ta muốn tạo một bảng của bất kỳ công cụ lưu trữ nào khác hoặc trong trường hợp nếu chúng ta muốn chỉ định rõ ràng loại công cụ là InnoDB.

Công cụ lưu trữ InnoDB là công cụ mặc định được gán cho bảng trong khi tạo trong các phiên bản Mysql 5.5 trở lên. Để đề cập rõ ràng công cụ lưu trữ của bảng trong khi tạo, bạn có thể sử dụng mệnh đề ENGINE =. Công cụ Innodb cho hiệu suất cao do có nhiều tính năng như khóa cấp hàng, hỗ trợ giao dịch và lập chỉ mục trên các khóa chính. Công cụ lưu trữ InnoDB cũng cung cấp tính năng sử dụng khóa ngoại giúp duy trì tính nhất quán và toàn vẹn trong cơ sở dữ liệu MySQL. Có thể truy cập đồng thời bởi nhiều người dùng và mỗi người trong số họ truy xuất dữ liệu nhất quán bằng cách sử dụng công cụ lưu trữ InnoDB.

MyISAM là gì?

MyISAM trong MySQL là kiểu máy lưu trữ (Storage Engine) mặc định khi tạo bảng và được dùng phổ biến nhất. MyISAM cho phép lập chỉ mục toàn cột (Full Text Index). Do đó, Storage Engine này cho tốc độ truy suất (Đọc và tìm kiếm) nhanh nhất trong các Storage Engine.

MyISAM là gì?

Nhược điểm của MyISAM là hoạt động theo kiểu Table Level locking nên khi cập nhật (thêm, xóa, sửa) 1 bản ghi nào đó trong cùng 1 table thì table đó sẽ bị khóa lại, không cho cập nhật (thêm, xóa, sửa) cho đến khi thao tác cập nhật trước đó thực hiện xong. Ngoài ra, do thiết kế đơn giản và không kiểm tra ràng buộc dữ liệu nên loại Storage Engine này dễ bị hỏng chỉ mục và dễ bị Crash.

Memory trong MySQL

Đây là kiểu Storage Engine được lưu trữ dữ liệu trực tiếp lên RAM nên tốc độ truy xuất và cập nhật rất nhanh. Vì thế, nó được dùng làm các table chứa dữ liệu tạm, chứa các phiên làm việc của user…

Memory trong MySQL

Khi khởi động lại dịch vụ MySQL thì dữ liệu trên bảng có Storage Engine là MEMORY sẽ mất hết dữ liệu. Chính vì thế nên khi các bạn khởi động lại mysqld trên VPS hay Server thì sẽ thấy số người online = 0 MEMORY sử dụng cơ chế table-level locking như MyISAM. Dung lượng của 1 bảng Storage Engine dạng MEMORY tối đa là bao nhiêu ? Nó phụ thuộc vào cấu hình thông số max_heap_table_size trong file my.cnf, mặc định 1 bảng kiểu MEMORY có dung lượng tối đa là 16MB. Nếu vượt quá bạn sẽ nhận được lỗi: Table xyz is full

Kết luận

Với 1 ứng dụng có tần suất đọc cao như trang tin tức, blog… thì bạn nên dùng MyISAM. Với ứng dụng có tần suất insert và update cao như: Diễn đàn, mạng xã hội.. thì bạn nên dùng InnoDB. Đối với các table chứa dữ liệu tạm và thông tin phiên làm việc của người dùng (Session) thì bạn nên dùng MEMORY Storage Engine.

Việc chuyển đổi 1 table từ storage engine này sang storage engine khác sẽ diễn ra tương đối lâu nếu dữ liệu trên table lớn. Do đó bạn cần kiên nhẫn chờ đợi.

Nguồn: InnoDB là gì? So sánh InnoDB & MyISAM trong MySQL – wikimaytinh.com

Tham khảo: https://dev.mysql.com/doc/refman/8.0/en/innodb-storage-engine.html

Bài viết này có hữu ích với bạn không?
Không