目录
目录
1.InnoDB与MyISAM的区别以及选择5.7版本(常见的还有Memory存储引擎,所有的数据都在内存中,数据的处理速度快,但是安全性不高)
1.InnoDB与MyISAM的区别以及选择5.7版本(常见的还有Memory存储引擎,所有的数据都在内存中,数据的处理速度快,但是安全性不高)
- InnoDb支持事务,MyISAM不支持。
- InnoDb支持外键,MyISAM不支持。
- InnoDb支持表级锁,行级锁,MyISAM只支持表级锁。(InnoDB的行锁是实现在索引上的,而不是锁在物理行记录上。潜台词是,如果访问没有命中索引,也无法使用行锁,将要退化为表锁。)
- 存储结构上,在InnoDb中.frm文件存储表结构信息,.ibd文件存储数据记录和索引;MyISAM中,.frm文件存储表结构信息,.myd文件存储数据记录,.myi文件存储索引信息。
- InnoDb是聚集索引,MyISAM是非聚集索引。
- InnoDb不支持全文索引,MyISAM支持。 在涉及全文索引领域的查询效率上MyISAM速度更快高;PS:5.7以后的InnoDB支持全文索引了
- InnoDb支持哈希索引,MyISAM不支持。
-
InnoDB表必须有唯一索引(如主键)(用户没有指定的话会自己找/生产一个隐藏列Row_id来充当默认主键),而Myisam可以没有。
如何选择
- 是否要支持事务,如果要请选择innodb,如果不需要可以考虑MyISAM;
- 如果表中绝大多数都只是读查询,可以考虑MyISAM,如果既有读也有写,请使用 InnoDB。
2. 主键、外键和索引的区别
主键 | 外键 | 索引 | |
定义: | 唯一标识一条记录,不能有重复的,不允许为空 | 表的外键是另一表的主键, 外键可以有重复的, 可以是空值 | 该字段没有重复值,但可以有一个空值 |
作用: | 用来保证数据完整性 | 用来和其他表建立联系用的 | 是提高查询排序的速度 |
个数: | 主键只能有一个 | 一个表可以有多个外键 | 一个表可以有多个惟一索引 |
3.聚集索引和非聚集索引的区别
聚集索引的叶子节点不仅存储列值,也会存储真实的数据行,一张表只能有一个聚集索引,因为物理存储位置只有一个。
非聚集索引也叫辅助索引,叶子节点存储列值,并且存储主键值。
4.char和vachar的区别
char是定长的,如果实际存储的不够定义的则用空格补齐,如果超过的话,就截断。
vachar的话,是变长的,实际存储的小于定义的话,就按照实际存储的记录,不过如果存储的小于225字节,会占用一个字节存储长度,超过225的话占用两个字节存储长度。
utf-8中一个字符最多占3个字节,utf-8mb4一个字符最多占4个字节
5.int(1)和int(11)的区别
实际存储都是占4个字节,一个字节8位,也就是0~2^32。
区别在于显示的宽度不同。比如存个1,int(1)就显示个1,int(11)它意思是不足11位,会给前面补相应个数的0。
6.mysql核心参数
sync_binlog是MySQL数据库的二进制日志(binary log)同步到磁盘的频率。
sync_binlog=1的话,代表每次提交一次事务都会把日志刷写到磁盘。
innodb_flush_log_at_commit参数