MySQL常问面试点

224 阅读4分钟
一.MySQL中innodb与myisam的区别:
1.InnoDB支持事务,MyISAM不支持事务
2.InnoDB支持行级锁和表级锁,页锁,MyISAM仅支持表级锁
3.InnoDB支持MVCC, MyISAM不支持
4.InnoDB支持外键,MyISAM不支持
5.InnoDB不支持全文索引,MyISAM支持
5.InnoDB删除,插入,更新数据效率更高,MyISAM查询数据效率高
二.innodb与myisam select count(*)效率高
myisam,因为myisam内部维护了一个计数器,可以直接调取。
三.varchar与char的区别:
char是一种固定长度的类型,长度不够会自动补充,varchar则是一种可变长度的类型
四.innodb引擎的4大特性:
1.插入缓冲(insert buffer),
2.二次写(double write),
3.自适应哈希索引(ahi),
4.预读(read ahead)
五.innodb的事务隔离级别与日志的实现方式:
事务的4种隔离级别:读未提交(RU);读已提交(RC);可重复读(RR);串行
六.日志种类:
错误日志:记录出错信息,也记录一些警告信息或者正确的信息。
查询日志:记录所有对数据库请求的信息,不论这些请求是否得到了正确的执行。
慢查询日志:设置一个阈值,将运行时间超过该值的所有SQL语句都记录到慢查询的日志文件中。
二进制日志:记录对数据库执行更改的所有操作。
中继日志:
事务日志:
七.事务是如何通过日志来实现的:
事务日志是通过redo和innodb的存储引擎日志缓冲(Innodb log buffer)来实现的,
当开始一个事务的时候,会记录该事务的lsn(log sequence number)号;
当事务执行时,会往InnoDB存储引擎的日志的日志缓存里面插入事务日志;当事务提交时,
必须将存储引擎的日志缓冲写入磁盘(通过innodb_flush_log_at_trx_commit来控制),
也就是写数据前,需要先写日志。这种方式称为“预写日志方式”
八.binlog的几种日志录入格式以及区别:
Statement:每一条会修改数据的sql都会记录在binlog中;
优点:不需要记录每一行的变化,减少了binlog日志量,节约了IO,提高性能。
缺点:由于记录的只是执行语句,为了这些语句能在slave上正确运行,
因此还必须记录每条语句在执行的时候的一些相关信息,
以保证所有语句能在slave得到和在master端执行时候相同的结果。

Row:不记录sql语句上下文相关信息,仅保存哪条记录被修改。
优点:binlog中可以不记录执行的sql语句的上下文相关的信息,仅需要记录那一条记录被修改成什么了。
所以rowlevel的日志内容会非常清楚的记录下每一行数据修改的细节。
缺点:所有的执行的语句当记录到日志中的时候,都将以每行记录的修改来记录,
这样可能会产生大量的日志内容;

Mixed:是以上两种level的混合使用,一般的语句修改使用statment格式保存binlog,
如一些函数,statement无法完成主从复制的操作,则 采用row格式保存binlog,
MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式
九.MySQL数据库cpu飙升到500%怎么处理:
列出所有进程 show processlist,观察所有进程多秒没有状态变化的(kill);
十.InnoDB引擎的行锁是通过加在什么上实现:
InnoDB是基于索引来完成行锁,没有通过索引将会表锁。
十一.mysql主从一致性校验:
checksum、mysqldiff、pt-table-checksum等工具
十二.索引类型:
主键索引: 数据列不允许重复,不允许为NULL,一个表只能有一个主键。
唯一索引: 数据列不允许重复,允许为NULL值,一个表允许多个列创建唯一索引。
普通索引: 基本的索引类型,没有唯一性的限制,允许为NULL值。
全文索引:是目前搜索引擎使用的一种关键技术。
十三.索引的数据结构和区别:B+树索引(InnoDB默认),Hash索引
1.hash索引进行等值查询更快(一般情况下),但是却无法进行范围查询。
2.hash索引不支持使用索引进行排序
3.hash索引不支持模糊查询以及多列索引的最左前缀匹配
4.hash索引任何时候都避免不了回表查询数据,而B+树在符合某些条件(聚簇索引,覆盖索引等)的时候
可以只通过索引完成查询。
5.hash索引虽然在等值查询上较快,但是不稳定。性能不可预测,当某个键值存在大量重复的时候,
发生hash碰撞,此时效率可能极差。而B+树的查询效率比较稳定,对于所有的查询都是从根节点到叶子节点,
且树的高度较低。