mysql学习笔记

/ Mysql面试 / 没有评论 / 486浏览

1.Buff Pool

1.他是什么?

他是存放索引数据和表数据的缓冲区,默认大小128M,我们的page默认16k,控制块(对缓存数据描述的控制块,表空间,数据页编号,还有地址信息)5%约800字节,所以在buff pool申请内存是 会多申请6m空间 用于存放控制块。

2.如何判断一个页是否在缓冲区

mysql有一个hash表数据结构,他的key:表空间号+数据页号,vaue:对应的控制块

当访问某个page页的时候 ,会先从这个hash表中去查找有没有对应的缓存页,没有就从free链表中找一个空闲页来加载

2.Page页

1.page页是什么

page是mysql存储数据的最小单位,他将mysql的的数据以页为单位存储到磁盘上,减少磁盘io操作,提升效率

2.page页有哪些类型

free page(链表) :空闲页

clean page:被使用的page,但是没有修改过

dirty page:脏页,被使用的page,并且数据被修改过,与磁盘数不一致

3.为什么写缓冲区,仅适用于非唯一普通索引页?

1.写缓冲区是什么

change buffer:写缓冲区,是针对二级索引(辅助索引)页的更新优化措施

他是存储insert,update,delete等变更操作

2.有什么用

在进行DML(insert,update,delete)操作的时候 ,

4.使用索引一定可以提升效率吗?

1.索引是什么

索引是一个排好序的数据结构,为了方便我们检索数据,加速数据检索,提升服务器性能

2.他的优点缺点

··优点:提升数据检索效率,降低io成本。他是一组排行序的数据,降低排序成本

缺点:创建维护索引都会消耗时间与磁盘空间,这个时间还会随着数据量的增大而增减

3.创建索引的原则是什么

在经常搜索的列上面创建索引

在主键上创建索引,强制唯一性,排序结构

在经常连接的列上面建立索引,加快连接速度(join)

在经常需要范围查询的列上添加索引(因为是排好序的便于范围搜索)

在经常需要排序的列上面添加索引(因为索引是排好顺序的)

在经常使用where子句的列上面创建索引,加快搜索

5.什么是聚簇索引和非聚簇索引?
1.他是什么

聚簇索引:就是索引与数据在一起的索引,比如innerdb的主键索引

非聚簇索引:就是数据不在一起的索引,也称为二级索引。

2.缺点是什么

聚簇索引:插入速度严重依赖插入顺序,

非聚簇索引:需要进行2次查询

6.索引的种类

7.介绍一下最佳左前缀法则?

1.它是什么

他是在聚合索引(联合索引)中匹配原则,根据b+tree索引数据结构

8.什么是索引下推?

1.他是什么:

在查询条件中涉及like的时候,如果匹配上聚合索引匹配,会优先匹配like,然后再匹配剩余条件中的条件,减少回表次数

9.什么是自适应hash索引?

·1.他是什么?

他是innerdb的三大特性之一,一个是buffer pool,另一个是双写缓冲区

1.自适应即不需要我们处理,当innerDb引擎根据查询统计发现某一条件满足hash索引的索引结构,然后就会自动建立一个hash索引

······2.自适应hash索引存在与内存中,不存在与缓存中。

3.只适合等值查询

10.为什么LIKE以%开头的索引会失效?

1.它是什么?

由于是B+tree结构,索引顺序是按字母

2.怎么解决他?

使用覆盖索引

11.InnoDb与MyIsam的区别?

事务和外键

InnoDb支持事务和外键

MyIsam不支持

锁机制

InnoDb支持表锁行锁

MyIsam只支持表锁

索引结构

InnoDb是聚簇索引

MyIsom是非聚簇索引

并非处理能力

MyIsam使用表锁写效率低,读不阻塞

InnoDb读写阻塞与隔离级别有关

存储文件

MyIsam是三个文件

InnoDb是2个文件

12.一个b+树中大概能存放多少索引记录

一页大小是16k,一个指针是6字节,一个主键用int是4字节 换算下来,三层节点大约4千多万数据

13.explain主要那些字段

1.id,select_t*ype,table,type,possible_*key,key,key_len,ref,row,extra

14.type字段中常见的值?

system,const,eqref,ref,rang,index,all

15.extra有哪些主要的指标

using where:全表扫描

using tmpporary :临时表,常见于排序和分组查询

using index: 不需要回表,直接从索引获取

using filesort :无法利用索引进行排序

using index condition: 有索引列,但是部分字段没有走索引

using join buffer :链接表

16.如何进行分页查询优化?

1.索引优化(id递增,取id >= )

2.利用子查询优化

17.如何对慢查询优化?

1.等待时间长

2.执行时间长

3.从explain入手

4.尽可能的从索引中排好序

5.尽量不适用select *

6.只过滤有效的数据

7.尽可能的避免复杂join与子查询

8.合理设计利用索引

优化思路:

Io问题,cpu,网络带宽

18.InnoDB日志相关的参数优化

1.修改日志缓存去大小

2.修改日志组文件个数

19.InnoDB Io线程相关参数优化

1.开启查询缓存

20.什么是写失效?

1.由于操作系统页大小是4k,mysql的页大小是16k。innodb的页写入到磁盘需要写4次

2.部分写失效,导致数据丢失