zoukankan      html  css  js  c++  java
  • mysql Innodb 和 MyISAM 区别记录

    加油,少年!

    在mysql 数据中,最常用的引擎有2中 InnoDB 和 MyISAM;

    文件类型区别:

    InnoDB 文件

    .frm 文件 是储存文件说明和 表结构的文件

    .idb 文件 是储存表相关的数据,索引,表的内部数据字典信息

    MyISAM 文件

    .frm 文件是存储表定义

    .MYD 文件是储存数据文件

    .MYI 文件是储存索引文件

    MyISAM引擎 特点:表级锁、不支持事务,支持全文索引

    高速存储和检索,以及全文搜索能力,适合数据仓库等查询频繁的应用

    InnoDB殷勤 特点:行级锁、事务安全(ACID兼容)、支持外键

    它的行级锁也不是绝对的,在不确定扫描范围的时候,InnoDB 也会进行锁全表

    MyISAM与InnoDB表锁和行锁的解释

    表级锁有两种模式:表共享读锁(Table Read Lock)和表独占写锁(Table Write Lock)。

    就是说对MyISAM表进行读操作时,它不会阻塞其他用户对同一表的读请求,但会阻塞对同一表的写操作;而对MyISAM表的写操作,则会阻塞其他用户对同一表的读和写操作。

    InnoDB行锁是通过给索引项加锁来实现的,即只有通过索引条件检索数据,InnoDB才使用行级锁,否则将使用表锁!行级锁在每次获取锁和释放锁的操作需要消耗比表锁更多的资源。在InnoDB两个事务发生死锁的时候,会计算出每个事务影响的行数,然后回滚行数少的那个事务

    其他方面的区别:

    • 对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引;
    • DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除;
    • LOAD TABLE FROMMASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用;
    • 擎被完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池;
    • 清空整个表时,InnoDB是一行一行的删除,效率非常慢。MyISAM则会重建表;

    该如何选择对应的引擎呢?

    MyISAM适合:

    1. 做很多count 的计算;
    2. 插入不频繁,查询非常频繁,如果执行大量的SELECT,MyISAM是更好的选择;
    3. 没有事务;

    InnoDB适合:

    1. 可靠性要求比较高,或者要求事务;
    2. 表更新和查询都相当的频繁,并且表锁定的机会比较大的情况指定数据引擎的创建;
    3. 如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表;
  • 相关阅读:
    采用C/C++语言如何实现复数抽象数据类型Complex
    单链表的插入伪算法和用C语言创建单链表,并遍历
    SQL多列查询最大值
    修改网页页面显示内容
    成为智者的四个敌人——唐望
    从0到1:构建强大且易用的规则引擎(转)
    身份采集、活体检测、人脸比对...旷视是如何做FaceID的? (转)
    drools -Rete算法(转)
    风控决策引擎系统的搭建设计指南(转载)
    [上市与资本运作] 【干货】创业公司天使轮、A轮、B轮……IPO融资时如何分配股权?(转载)
  • 原文地址:https://www.cnblogs.com/fangdada/p/15365713.html
Copyright © 2011-2022 走看看