关于mysql 高频面试题整理
MySQL引擎 InnoDB和MyISAM的区别
1、MySQL默认采用的是MyISAM。
2、MyISAM不支持事务,而InnoDB支持。
3、InnoDB支持数据行锁定,MyISAM不支持行锁定,只支持锁定整个表。
4、InnoDB支持外键,MyISAM不支持。
5、InnoDB的主键范围更大,最大是MyISAM的2倍。
6、InnoDB不支持全文索引,而MyISAM支持。全文索引是指对char、varchar和text中的每个词(停用词除外)建立倒排序索引。MyISAM的全文索引其实没啥用,因为它不支持中文分词,必须由使用者分词后加入空格再写到数据表里,而且少于4个汉字的词会和停用词一样被忽略掉。
7、MyISAM支持GIS数据,InnoDB不支持。
MyISAM 和 INNODB的区别
- 事务安全(MyISAM不支持事务,INNODB支持事务)
- 查询和添加速度(MyISAM批量插入速度快)
- 支持全文索引(MyISAM支持全文索引,INNODB不支持全文索引)
- 锁机制(MyISAM时表锁,innodb是行锁)
- 外键 MyISAM 不支持外键, INNODB支持外键. (在PHP开发中,通常不设置外键,通常是在程序中保证数据的一致)
如何优化 mysql存储引擎,
1.1.1 MyISAM
MyISAM引擎是MySQL 5.1及之前版本的默认引擎,它的特点是:
不支持行锁,读取时对需要读到的所有表加锁,写入时则对表加排它锁;
不支持事务;
不支持外键;
不支持崩溃后的安全恢复;
在表有读取查询的同时,支持往表中插入新纪录;
支持BLOB和TEXT的前500个字符索引,支持全文索引;
支持延迟更新索引,极大提升写入性能;
对于不会进行修改的表,支持压缩表,极大减少磁盘空间占用。
InnoDB在MySQL 5.5后成为默认索引,它的特点是:
支持行锁,采用MVCC来支持高并发;
支持事务;
支持外键;
支持崩溃后的安全恢复;
不支持全文索引。
myISAM 与 InnoDB 主要区别
myisam 批量插入速度快,InnoDB慢,myisam插入数据时不排序
InooDB支持事务,而MyISAM不支持事务;
InnoDB不支持全文索引,myisam支持全文索引
锁机制,myisam是表锁,InnoDB是行锁
myisam不支持外键,InnoDB支持外键
InnoDB支持MVCC,而MyISAM不支持;
InnoDB是索引组织表, myisam 是堆表;
InnoDB表支持多种行格式, myisam 不支持;
InnoDB不能通过直接拷贝表文件的方法拷贝表到另外一台机器, myisam 支持;
索引用什么数据结构,为什么用b+而不是红黑树,或者B树,或者哈希
B+树能显著减少IO次数,提高效率
B+树的查询效率更加稳定,因为数据放在叶子节点
B+树能提高范围查询的效率,因为叶子节点指向下一个叶子节点
B+tree 数据只存储在叶子节点中。这样在B树的基础上每个节点存储的关键字数更多,树的层级更少所以查询数据
事务特性
事务特性(4种)
原子性 (atomicity):强调事务的不可分割.
一致性 (consistency):事务的执行的前后数据的完整性保持一致.
隔离性 (isolation):一个事务执行的过程中,不应该受到其他事务的干扰
持久性(durability) :事务一旦结束,数据就持久到数据库
隔离级别
脏读,不可重复读,幻读,解释
事务的并发问题
1、脏读:读取了未提交的新事物,然后被回滚了
2、不可重复读:事不可重复读是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。
3、幻读: 在事务A多次读取构成中,事务B对数据进行了新增操作,导致事务A多次读取的数据不一致。幻读和不可重复读的区别在于,
不可重复是针对记录的update操作,只要在记录上加写锁,就可避免;幻读是对记录的insert操作,
要禁止幻读必须加上全局的写锁(比如在表上加写锁)。 另外说一下两类丢失更新:
解决,如果一个事物加上表级锁,只要有任何东西操作这个表的时候,禁止任何操作的并发
小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表
事务隔离级别的作用 为什么要采用B+树,而不是红黑树,或者B树,或者哈希
本文地址:https://blog.csdn.net/zhangqiang180/article/details/107300076