Chuyển đến nội dung chính

MYISAM và INNODB trong MySQL

MySQL hỗ trợ nhiều kiểu bảng dữ liệu hoặc các máy chủ lưu trữ dữ liệu khác nhau để giúp tối ưu hóa cơ sở dữ liệu. Kiểu dữ liệu quen thuộc đối với lập trình viên trên nền tảng LAMP thường là MyISAM. Nhưng ngoài ra còn có nhiều kiểu bảng dữ liệu khác như InnoDB, BDB, MERGE, HEAP. MyISAM và InnoDB là 2 kiểu bảng dữ liệu được sử dụng nhiều nhất hiện nay, để bạn dễ lựa chọn khi quyết định lựa chọn engine nền bên dưới của MySQL.

  • InnoDB hỗ trợ relationship (data integrity and foreign key constraints) còn MyISAM thì ko: Đa phần các open source đều không coi trọng việc này nhưng nếu ứng dụng của bạn bắt buộc phải dùng foreign key constraints thì InnoDB là lựa chọn.
  • InnoDB hỗ trợ transactions còn MyISAM thì không: Nếu hệ thống của bạn dùng trong các ứng dụng ngân hàng hoặc phải thực hiện việc giao dịch thì chắc chắn là MyISAM sẽ bị loại.
  • InnoDB thiên về row-level locking còn MyISAM thiên về table locking: Tức là khi hệ thống của bạn phải thực hiện nhiều các thao tác insert/update thì InnoDB là tốt hơn, còn nếu hệ thống của bạn thực hiện các thao tác select là chủ yếu thì dùng MyISAM là lựu chọn tốt hơn.
  • MyISAM hỗ trợ full-text searches còn InnoDB thì không: Đây rõ ràng là một điểm yếu của InnoDB so với MyISAM, và dĩ nhiên là trong hệ thống có dùng full-text searches thì phải loại InnoDB đầu nước.
  • Tốc độ của MyISAM cao hơn InnoDB: Khi hệ thống của bạn đòi hỏi performance cao thì MyISAM là lựa chọn tốt hơn.

Đặc điểm quan trọng nhất để phân biệt các kiểu bảng dữ liệu ở trên là tính có an toàn giao tác hoặc không. Chỉ các bảng dữ liệu kiểu InnoDB và BDB là có tính an toàn giao tác (transaction) và chỉ những bảng dữ liệu kiểu MyISAM hỗ trợ chỉ mục toàn văn bản (full text index) và các đặc tính tìm kiếm. MyISAM cũng là kiểu bảng dữ liệu mặc định khi bạn tạo bảng dữ liệu mới mà không khai báo kiểu bảng dữ liệu cụ thể.

Những so sánh trên đây giúp bạn dễ dàng lựa chọn kiểu bảng dữ liệu phù hợp khi sử dụng. Thú thật, trước giờ tôi cũng toàn sử dụng MyISAM nên cũng mù mờ về InnoDB. Bài viết này được viết với mục đích ghi chú lại những điểm khác nhau về 2 kiểu lưu trữ CSDL nhằm mục đích chia sẻ và ghi nhớ khi cần.

Note: Khi bạn xuất database ra file script sql thì sau mỗi bảng thường có dòng ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8; khi bạn import nó vào mysql thì kiểu bảng dữ liệu sẽ là InnoDB trường auto increment sẽ bắt đầu từ 22. Khi chúng ta dùng lệnh để thêm 1 bảng mới mà không set ENGINE thì kiểu bảng dữ liệu mặc định se là MyISAM, và khi chúng ta tạo khóa ngoại cho bảng mới tạo với một bảng đã có sẵn sẽ tạo ra lỗi không thể update foreign key

Nhận xét

Bài đăng phổ biến từ blog này

3Q6S - Tiêu chuẩn chất lượng công ty nhật

+  Ý nghĩa của 3Q6S -          Quality company: công ty tốt -          Quality worker: nhân viên tốt -          Quality Products : sản phẩm tốt -          Seiri : sắp xếp gọn gàng -          Seiton: đặt ngăn nắp, đúng chỗ -          Seiketsu : tinh khiết, sáng sủa -          Seisou: quét dọn sạch sẽ -          Saho : tác phong, hành động đúng -          Shitsuke : kỷ luật, nề nếp     – Lấy các chữ đầu của các mục trên để gọi là 3Q6S.        * Sắp xếp gọn gàng bao gồm ý nghĩa “Phân chia những vật cần thiết và không cần thiết, những vật không cần thiết không đặt ở nơi làm việc...

Tổng quan về solfware testing

Chương 1: Tổng quan về test phần mềm         1.1 Các giai đoạn test         1.2 Định nghĩa về test         1.3 Mục tiêu của test         1.4 Vai trò và nhiệm vụ của Tester. Chương 2: Những yêu cầu cần thiết khi thực hiện test        2.1 Ý nghĩa những tài liệu tester cần hiểu trước khi bắt đầu test        2.2 Hướng test cụ thể trong phần mềm Chương 3: Quy trình test       Sơ đồ tổng quát. Chương 4: Phương pháp test và kỹ thuật thiết kế testcase       4.1 Phương pháp test       4.2 Loại test       4.3 Test case Chương 5: Lỗi phổ biến trong phần mềm và cách Report Bug       5.1 13 lỗi phổ biến trong phần mềm (Bug type).       5.2 Report Bug Template. Chương 6: Test Plan và thế nào là Tester tốt A. TEST PLAN       I. Definitions:   ...

System test - Kiểm thử hệ thống

Trong quá trình kiểm thử phần mềm, ứng dụng web,...  bạn sẽ có các giai đoạn như: - Unit test - Intergration test - System test - Acceptance test Tương ứng với từng giai đoạn phát triển của của hệ thống thì quá trình test cũng sẽ thay đổi tương úng nhằm đảm bảo hệ thống phát triển theo đúng mong đợi của nhà sản xuất và khách hàng I. Kiểm thử hệ thống là gì ? - Kiểm thử hệ thống là kiểm tra lại toàn bộ hệ thống sau khi tích hợp , nhằm đảm bảo hệ thống đáp ứng các yêu cầu đề ra . - KTHT kiểm tra cả các hành vi chức năng của phần mềm lẫn các yêu cầu về chất lượng như độ tin cậy, tính tiện lợi khi sử dụng, hiệu năng và bảo mật. Mức kiểm tra này đặc biệt thích hợp cho việc phát hiện lỗi giao tiếp với PM hoặc phần cứng bên ngoài, chẳng hạn các lỗi "tắc nghẽn" (deadlock) hoặc chiếm dụng bộ nhớ. Sau giai đoạn KTHT , PM thường đã sẵn sàng cho khách hàng hoặc người dùng cuối cùng kiểm tra để chấp nhận ...