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的主要内容,如果未能解决你的问题,请参考以下文章