1,什么是索引?
一种数据结构,可以帮助我们快速的查找数据
2,为什么选用B+树作为索引数据结构?
hash虽然等值查询很快,但无法进行范围查询,也不支持索引排序,模糊查询。最左前缀匹配等缺点,B+树可以带来较好的查询速度。
3,建立索引考虑因素
选用经常查询的字段建立索引比较合适(经常修改的字段不适合建立索引)
4,常用数据库引擎有哪些?
MyIsam:不支持事务,非聚簇索引,不支持行锁,支持全文索引
INNODB:聚簇索引,支持事务,行锁,不支持全文索引
5,事务ACID属性
A:原子性,要么全部成功提交,要么全部失败回滚,不能执行一部分
C:一致性,一个事务在执行前和执行后,数据库必须处于一致性状态
I:隔离性,并发的事务相互隔离,互不影响
D:持久性,一旦事务提交,对应数据变化就会永久保存到数据库中
6,事务隔离级别
MySQL默认隔离级别为:可重复读
(1),读未提交,允许脏读,级别最低
(2),读已提交,授权读取已提交的数据,不允许脏读,允许不可重复读取
(3),可重复读,保证多次读取同一个数据时,其值和事务开始时是一致的,禁止脏读和不可重复读取,但避免不了幻读(同样事务操作,前后两个时间对同一数据项的读取,可能出现不一致)
(4)串行化,拒绝事务并发,级别最高,事务效率最低,可避免幻读
7,回表是什么?
回表就是先通过数据库索引扫描出数据所在行,再通过行主键ID取出索引未提供数据。即基于非主键索引需要多扫描一次索引树。
8,什么是聚簇索引?
聚簇索引:数据和索引放一块,找到索引也就找到了数据
非聚簇索引:将数据和索引分开放,索引的叶子节点指向数据所在行
9,INNODB主键索引和非主键索引在数据存储上的差异
主键索引叶子节点存的是整行数据,非主键索引叶子节点存的是主键的值
10,为什么INNODB一定会生成主键?
因为数据结构是通过聚簇索引组织起来的,若无主键,通过其他索引回表时无法查询到数据所在行
11,Mysql redo和undo日志是什么?
(1)redo日志保证事务持久性,当用户写数据时,先写redo log然后通过某种方式写入磁盘。
(2)undo日志保证事务原子性,是MVCC机制重要组成部分
12,redo日志的刷盘时机
logbuffer不足时,事务提交时,正常关闭服务器时
13,varchar(10)和int(10)的差别?
varchar10后面的10代表申请的空间长度,也是可以储存的最大长度,而int(10)代表了展示的长度为10,不足10位用0补齐。
14,binlog有几种录入格式?
三种格式,statement,row,和mixed。
15,如何解决超大分页
(1)减少查询时load的数量(2)减少大分页查询(3)靠redis缓存,预先查到分页内容存入redis中直接返回(比较常用)。
16,慢查询优化
(1)首先explain语句,看是否额外load了额外数据,可能是查询了多余行并且抛弃掉了,可能是加载了许多结果中不需要的列
(2)分析语句的执行计划,然后获得其索引使用情况,修改语句或索引,使语句尽可能命中索引
(3)如果语句的优化已经无法进行,可以考虑表中数据量是否太大,如果是这样的话可以进行纵向或横向分表。