Mysql中InnoDB与MyISAM两种数据库引擎的区别

1. InnoDB 支持事务,MyISAM 不支持事务。对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一

个事务,这是 MySQL 将默认存储引擎从 MyISAM 变成 InnoDB 的重要原因之一。

2. InnoDB 支持外键,而 MyISAM 不支持。对一个包含外键的 InnoDB 表转为 MYISAM 会失败。

3. InnoDB 是聚集索引,MyISAM 是非聚集索引。聚簇索引的文件存放在主键索引的叶子节点上,因此 InnoDB 必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,

先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而 MyISAM 是非聚集索引,数据文件是分离的,索引保存的是数据文件的指

针。主键索引和辅助索引是独立的。(也就是说:InnoDB的B+树主键索引的叶子节点就是数据文件,辅助索引的叶子节点是主键的值;而MyISAM的B+树主键索引和辅助索引的叶子节

点都是数据文件的地址指针。)

4. InnoDB 不保存表的具体行数,执行 select count(*) from table 时需要全表扫描。而MyISAM 用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快

(注意不能加有任何WHERE条件)。

5. InnoDB 最小的锁粒度是行锁,MyISAM 最小的锁粒度是表锁。一个更新语句会锁住整张表,导致其他查询和更新都会被阻塞,因此并发访问受限。这也是 MySQL 将默认存储引擎从

MyISAM 变成 InnoDB 的重要原因之一。

6. Innodb不支持全文索引,而MyISAM支持全文索引,在涉及全文索引领域的查询效率上MyISAM速度更快高;PS:5.7以后的InnoDB支持全文索引了。

7. MyISAM表格可以被压缩后进行查询操作。

8. InnoDB表必须有唯一索引(如主键)(用户没有指定的话会自己找/生产一个隐藏列Row_id来充当默认主键),而Myisam可以没有

9. Innodb存储文件有frm、ibd,而Myisam是frm、MYD、MYI

  Innodb:frm是表定义文件,ibd是数据文件

  Myisam:frm是表定义文件,myd是数据文件,myi是索引文件

 

 

 

InnoDB为什么推荐使用自增ID作为主键

 

  自增ID可以保证每次插入时B+索引是从右边扩展的,可以避免B+树和频繁合并和分裂(对比使用UUID)。如果使用字符串主键和随机主键,会使得数据随机插入,效率比较差。

 

 

4. InnoDB引擎的4大特性:

 

1. 插入缓冲(insert buffer)

 

2. 二次写(double write)

 

3. 自适应哈希索引(ahi)

 

4. 预读(read ahead)

 

 

 

索引问题

索引是对数据库表中一个或多个列的值进行排序的结构,建立索引有助于快速获取信息。

你也可以这样理解:索引就是加快检索表中数据的方法。数据库的索引类似于书籍的索引。

在书籍中, 索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅 速地找到表中的数据,而不必扫描整个数据库。

mysql 有4种不同的索引:

主键索引(PRIMARY) 数据列不允许重复,不允许为NULL,一个表只能有一个主键。

唯一索引(UNIQUE) 数据列不允许重复,允许为NULL值,一个表允许多个列创建唯一索引。

可以通过 ALTER TABLE table_name ADD UNIQUE (column); 创建唯一索引

可以通过 ALTER TABLE table_name ADD UNIQUE (column1,column2);创建唯一组合索 引

普通索引(INDEX) 可以通过 ALTER TABLE table_name ADD INDEX index_name (column);创建普通索引

可以通过 ALTER TABLE table_name ADD INDEX index_name(column1, column2, column3);创建组合索引

全文索引(FULLTEXT)可以通过 ALTER TABLE table_name ADD FULLTEXT (column); 创建全文索引

 

索引并非是越多越好,创建索引也需要耗费资源,

一是增加了数据库的存储空间,

二是在插入和删除时 要花费较多的时间维护索引 索引加快数据库的检索速度 索引降低了插入、删除、修改等维护任务的速度 唯一索引可以确保每一行数据的唯一性 通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能 索引需要占物理和数据空间

 

 

 
posted @ 2022-08-22 16:42  风骚羊肉串  阅读(87)  评论(0编辑  收藏  举报