欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

关于mysql 高频面试题整理

程序员文章站 2022-11-30 16:51:29
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的全文索引其实没啥用,因为它不...

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的区别

  1. 事务安全(MyISAM不支持事务,INNODB支持事务)
  2. 查询和添加速度(MyISAM批量插入速度快)
  3. 支持全文索引(MyISAM支持全文索引,INNODB不支持全文索引)
  4. 锁机制(MyISAM时表锁,innodb是行锁)
  5. 外键 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) :事务一旦结束,数据就持久到数据库

隔离级别

关于mysql 高频面试题整理

脏读,不可重复读,幻读,解释
事务的并发问题

1、脏读:读取了未提交的新事物,然后被回滚了

2、不可重复读:事不可重复读是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。
  3、幻读: 在事务A多次读取构成中,事务B对数据进行了新增操作,导致事务A多次读取的数据不一致。幻读和不可重复读的区别在于,
不可重复是针对记录的update操作,只要在记录上加写锁,就可避免;幻读是对记录的insert操作,

要禁止幻读必须加上全局的写锁(比如在表上加写锁)。 另外说一下两类丢失更新:
解决,如果一个事物加上表级锁,只要有任何东西操作这个表的时候,禁止任何操作的并发

小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表

事务隔离级别的作用 为什么要采用B+树,而不是红黑树,或者B树,或者哈希

关于mysql 高频面试题整理

本文地址:https://blog.csdn.net/zhangqiang180/article/details/107300076