Domain, hosting, vps giá rẻ
Kết quả 1 đến 2 của 2

Chủ đề: [MySQL] InnoDB, MyISAM và MEMORY, nên sử dụng Storage Engine nào khi dùng MySQL

  1. #1
    nghiammo1992's Avatar
    Bài viết
    5,068
    Cấp độ
    Bang hội
    Tiếu Ngạo
    Tu luyện
    Độ kiếp Hư Thần
    Giới tính
    Con trai
    Join Date
    Jun 2012
    Đến từ
    Hà Giang
    Tuổi
    32
    Danh vọng
    10
    Điện thoại
    0367790762

    [MySQL] InnoDB, MyISAM và MEMORY, nên sử dụng Storage Engine nào khi dùng MySQL

    InnoDB và MyISAM, khác nhau giữa InnoDB và MyISAM, so sánh InnoDB và MyISAM, dùng InnoDB hay MyISAM, Kiểu table MEMORY trong mySQL

    MySQL là hệ quản trị cơ sở dữ liệu miễn phí được sử dụng nhiều nhất khi ứng dụng được viết bằng ngôn ngữ PHP. Tuy nhiên, khi tạo 1 bảng trong MySQL sẽ có nhiều kiểu Storage Engine để bạn lựa chọn. Trong đó có 3 kiểu lưu trữ bảng được dùng nhiều nhất là InnoDB, MyISAMMemory.

    Nhưng ta nên dùng InnoDB,MyISAM hay MEMORY ? Tại sao lại như thế ? Bài viết này sẽ giúp các bạn nắm được cách hoạt động của các Storage Engine này. Từ đó có thể biết được cách chọn loại phù hợp khi xây dựng website của mình để hiệu suát và độ ổn định đạt được cao nhất.



    Nên chọn MyISAM,InnoDB hay Memory ?


    1. MyISAM trong MySQL

    Đây là kiểu Storage Engine mặc định khi tạo bảng và được dùng phổ biết nhất. Storage Engine này 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.

    Tuy nhiên, 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. Đây là cơn ác mộng của các webmaster khi table Crash là table có dung lượng lớn, khi phục hồi rất lâu và hồi hộp




    Table dạng MyISAM hay bị Crash


    Làm sao để chuyển 1 bảng từ Storage Engine khác (VD: InnoDB) sang MyISAM ?
    Bạn có thể dùng truy vấn sau:
    Mã:
    ALTER TABLE table_name ENGINE = MyISAM;
    2. InnoDB trong MySQL

    Đây là kiểu Storage Engine mới hơn MyISAM. Storage Engine này không hỗ trợ Full Text Index như MyISAM (Tin mừng là sắp có hỗ trợ ở các phiên bản mới, hiện tại đã có beta rồi ) nhưng hỗ trợ quan hệ giữa các bảng (Khóa ngoại). Do đó, kiểu Storage này kiểm tra tính toàn vẹn dữ liệu và ràng buộc rất cao => Khó sảy ra tình trạng hỏng chỉ mục và Crash như MyISAM.

    Ngoài ra, kiểu Storage Engine này hoạt động theo cơ chế Row Level Locking nên khi cập nhật (Thêm,xóa,sửa) 1 bảng thì chỉ có bản ghi đang bị thao tác bị khóa mà thôi, các hoạt động khác trên table này vẫn diễn ra bình thường.

    Vì những tính chất trên, kiểu Storage Engine này thích hợp sử dụng cho Ngân hàng và các trang web có tần suất cập nhật dữ liệu cao như Mạng xã hội, diễn đàn....

    Tuy nhiên, nó có nhược điểm là hoạt động tốn RAM hơn so với MyISAM (Nếu MyISAM mà tần suất insert hay update cao thì nếu cấu hình chưa đủ mạnh thì khéo còn tốn RAM nhiều hơn InnoDB vì hàng đợi lớn )

    => vBulletin, mã nguồn diễn đàn lớn nhất hiện nay thật sai lầm khi chọn MyISAM làm kiểu Storage Engine cho các bảng dữ liệu forum. Vì thế mà các trang lớn mới hay bị Crash bảng như vậy (Database Error)

    Làm sao để chuyển 1 bảng từ Storage Engine khác (VD: MyISAM) sang InnoDB ?
    Bạn có thể dùng truy vấn sau:
    Mã:
    ALTER TABLE table_name ENGINE = InnoDB;
    (Lưu ý là nếu trước đó table này dùng MyISAM mà có cột nào đặt Full Text Index thì bạn phải xóa Full Text Index trên cột đó đi mới có thể chuyển được)


    3. 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...

    Khi khởi động lại dịch vụ MySQL thì dữ liệu trên bảng có Storage EngineMEMORY 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...


    Tóm lại,
    -> 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
    -> Bạn nên dùng MEMORY Storage Engine cho 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)
    -> 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 đó cần kiên nhẫn.

    Bài viết chỉ post trên sinhvienit.net, ai copy đi đâu vui lòng ghi rõ nguồn.
    Cám ơn !
    Diễn đàn chia sẻ kiến thức điện thoại: http://chiase123.com
    Click vào Hiện ra để xem chữ ký của mình :X

  2. #2

    Bài viết
    9
    Cấp độ
    Bang hội
    ?????
    Tu luyện
    Sơ nhập Tu chân giới
    Giới tính
    Vô tính
    Join Date
    Nov 2012
    Đến từ
    Hà Giang
    Tuổi
    31
    Danh vọng
    0
    Điện thoại

    chả hiểu mẹ gì cậu ạ :))

Thông tin về chủ đề này

Users Browsing this Thread

Có 1 người đang xem chủ đề. (0 thành viên và 1 khách)

Các Chủ đề tương tự

  1. [MySQL] Change Collation in Database
    Bởi nghiammo1992 trong diễn đàn PHP & MySQL
    Trả lời: 0
    Bài viết cuối: 17/02/2014, 3:08
  2. Trả lời: 0
    Bài viết cuối: 04/02/2014, 23:48
  3. [MySQL] Xử lý nội dung trùng lặp trong Database
    Bởi nghiammo1992 trong diễn đàn PHP & MySQL
    Trả lời: 0
    Bài viết cuối: 04/02/2014, 17:54
  4. [Linux] Hướng dẫn xóa (uninstall) mysql, apache và php
    Bởi nghiammo1992 trong diễn đàn VPS - Server
    Trả lời: 0
    Bài viết cuối: 15/11/2013, 19:57
  5. Trả lời: 0
    Bài viết cuối: 02/11/2013, 10:23
  6. [MySQL] Lệnh tìm kiếm và thay thế nội dung trong MySQL
    Bởi nghiammo1992 trong diễn đàn PHP & MySQL
    Trả lời: 0
    Bài viết cuối: 20/10/2013, 23:31
  7. Trả lời: 0
    Bài viết cuối: 08/10/2013, 21:03
  8. [ Safeshared / Upfile / 514.03 MB ] Reus - Tạo nên thế giới khác
    Bởi Stommy Huy trong diễn đàn Game hành động
    Trả lời: 0
    Bài viết cuối: 07/08/2013, 8:09
  9. [ Góp Ý ] Nên thay đỗi giao diện, cấp,...
    Bởi Stommy Huy trong diễn đàn Góp ý, báo lỗi
    Trả lời: 4
    Bài viết cuối: 24/02/2013, 23:35
  10. [VPS linux] Hướng dẫn update php, mysql, apache phiên bản mới nhất
    Bởi nghiammo1992 trong diễn đàn VPS - Server
    Trả lời: 0
    Bài viết cuối: 21/01/2013, 20:23

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •