MySQL-MySQL中的InnoDB和MyISAM

Posted 天津 唐秙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL-MySQL中的InnoDB和MyISAM相关的知识,希望对你有一定的参考价值。

mysql-MySQL中的InnoDB和MyISAM

数据库存储引擎

  数据库存储引擎是数据库底层软件组织,数据库管理系统通过使用数据引擎进行创建,查询,更新和删除数据,不同的存储引擎提供不同的存储机制,索引技巧,锁定水平等功能。不同的存储引擎,还可以获得特定的功能。

查看数据库使用的引擎

show engines;


  mysql对于多引擎有着很好的兼容,一个数据库服务器上不同的数据库完全可以使用不同的数据引擎,甚至一个数据库中的多个表也可以使用不同的引擎。
其中InnoDB和MyISAM的一些差异:

  • InnoDB支持事务,MyISAM不支持事务,对于 InnoDB 每一条 SQL 语句都默认封装成事务进行提交,这样就会影响速度,优化速度的方式是将多条 SQL 语句放在 begin 和 commit 之间,组成一个事务。
  • InnoDB支持外键,MyISAM不支持外键
  • InnoDB不支持全文索引,MyISAM支持全文索引,查询效率上 MyISAM 要高。
      所以如果一个表修改要求比较高的事务处理,可以选择 InnoDB。这个数据库中可以将查询要求比较高的表选择 MyISAM 存储。

存储引擎原理
  MyISAM 和 InnoDB 两种引擎所使用的索引的数据结构都是B+树
区别:

  • MyISAM中B+树的数据结构存储的内容是实价数据的地址值,它的索引和实际数据是分开的,只不过使用索引指向了实际数据,这种索引的模式被称为非聚簇索引。
  • InnoDB 中 B+ 树的数据结构中存储的都是实际的数据,这种索引有被称为聚集索引。

B+树

原则:

  • 所有节点关键字是按照递增排列,左小右大

  • 子节点数:非叶子节点的子节点>1,且<=M ,且M>=2,空树除外,M阶代表一个树节点最多有多少个查找路径,M为几,为几叉树。

  • 关键字数:枝节点的关键字数量大于等于 ceil(m/2)-1 个且小于等于 M-1 个(注:ceil() 是个朝正无穷方向取整的函数 如 ceil(1.1)结果为 2)

  • 叶节点的指针为空且叶节点具有相同的深度

     class BPTree; //self explanatory classes	
     class Node	
     {	
       bool IS_LEAF;	
       int *key, size;	
       Node** ptr;	
       friend class BPTree;	
     public:	
       Node();	
     };	
     class BPTree	
     {	
       Node *root;	
       void insertInternal(int,Node*,Node*);	
       void removeInternal(int,Node*,Node*);	
       Node* findParent(Node*,Node*);	
     public:	
       BPTree();	
       void search(int);	
       void insert(int);	
       void remove(int);	
       void display(Node*);	
       Node* getRoot();	
       void cleanUp(Node*);	
       ~BPTree();	
     };
    

以上是关于MySQL-MySQL中的InnoDB和MyISAM的主要内容,如果未能解决你的问题,请参考以下文章

MyISAM和InnoDB的主要区别和应用场景

MyISAM和InnoDB区别和应用场景

mysql常用的存储引擎,MyISAM和InnoDB的对比

mysql数据库引擎InnoDB和MyISAM

简述在MySQL数据库中MyISAM和InnoDB的区别

MySQL | Xtrabackup 的简介