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)操作的时候 ,
- 如果数据是非唯一索引(二级索引)会检查数据是否在buffer pool中,如果不在那么会进行chang buffer 记录,然后再某个时刻merge到buffer pool中,然后将记录更新到redo log中 再刷脏
- 不是就会到磁盘进行唯一校验 ,然后加载数据到buffer pool中,然后将记录更新到redo log中 再刷脏
4.使用索引一定可以提升效率吗?
1.索引是什么
索引是一个排好序的数据结构,为了方便我们检索数据,加速数据检索,提升服务器性能
2.他的优点缺点
··优点:提升数据检索效率,降低io成本。他是一组排行序的数据,降低排序成本
缺点:创建维护索引都会消耗时间与磁盘空间,这个时间还会随着数据量的增大而增减
3.创建索引的原则是什么
在经常搜索的列上面创建索引
在主键上创建索引,强制唯一性,排序结构
在经常连接的列上面建立索引,加快连接速度(join)
在经常需要范围查询的列上添加索引(因为是排好序的便于范围搜索)
在经常需要排序的列上面添加索引(因为索引是排好顺序的)
在经常使用where子句的列上面创建索引,加快搜索
5.什么是聚簇索引和非聚簇索引?
1.他是什么
聚簇索引:就是索引与数据在一起的索引,比如innerdb的主键索引
非聚簇索引:就是数据不在一起的索引,也称为二级索引。
2.缺点是什么
聚簇索引:插入速度严重依赖插入顺序,
非聚簇索引:需要进行2次查询
6.索引的种类
- 普通索引
- 唯一索引
- 主键索引
- 复合索引(联合索引)
- 全文索引:比like速度快
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.部分写失效,导致数据丢失
本文由 zzpp 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为:
2024/09/12 09:05