Mysql面试总结-索引

常见索引面试题

1.数据库中最常见的慢查询优化方式是什么
2.为什么加索引能优化慢查询
3.哪些数据结构能够提高查询速度
4.为什么这些数据结构能优化查询速度 Mysql还要选择b+树

索引是什么

索引是帮助mysql高效获取数据的数据结构
索引存储在文件系统中
索引的文件存储形式与存储引擎相关
索引的结构:
hash
二叉树
b树
b+树

hash存储的缺点 :需要将所有的数据文件添加到内存,比较耗费内存空间
范围查询用不了

二叉树/红黑树:无论是二叉树还是红黑树,都会因为树的深度过深而造成io次数变多,影响数据的读取效率

b树:键值是主键 data存的是除主键以外的数据记录

B+树
B+树是在B树的基础之上做的一种优化变化如下:
1.B+树的每个节点可以包含更多的结点,这样做的原因有两个,第一个是为了降低树的高度,第二个原因是将数据范围变成多个区间,区间越多,数据检索越快
2.非叶子结点存储key,叶子结点存储key+value
3.叶子结点两两指针相互连接(符合磁盘预读的特性),顺序查询性能越高

INNODB中索引的注意事项 之前面试官问过
1.INNODB是通过B+树对主键创建索引,然后叶子结点中存储记录,如果没有主键那么会选择唯一键,如果没有唯一键,那么就会生成一个6位的row id来作为主键
2.如果创建索引的键是其他字段,那么在叶子结点中存储的是该记录的主键,然后通过主键索引找到对应的记录(辅助索引 - > 主索引)

MYISAM索引的存储
索引下面是数据的物理地址不像INNODB下面存的实际数据
Mysql下面默认的存储引擎是myisam

索引的分类
五种:主键索引、唯一索引、普通索引、全文索引、组合索引

主键索引:
主键是一种唯一索引,必须指定它为primary key 每个表只能有一个主键 唯一且非空
唯一索引:
索引列的所有值只能出现一次,即必须唯一,值可以为空
普通索引:
没有任何限制
全文索引:
全文索引的类型为FULLTEXT。全文索引可以在varchar char text类型的列上创建
组合索引:
多列值组合成一个索引,专门用于组合搜索

Myisam和Innodb的区别:
1.myisam是非聚簇索引 innodb是聚餐索引
2.innodb支持事务 myisam不支持事务
3.innodb支持表锁和行锁,myisam不支持行锁
4.innodb支持外键,myisam不支持
5.myisam适合大量select操作,为什么呢?好像是里面有个计数器啥的

猜你喜欢

转载自blog.csdn.net/lirenci123/article/details/109535150