本文档题目来自MySQL纯手写面试笔记解析,2020锤爆35K月薪,你值得拥有
闲谈:百度找的总结而已;过段时间再看一下高性能MySQL吧。本来看了整理了一些。觉得很繁琐,然后直接百度找答案了,不过吧想弄懂为什么还是得看官方资料。
什么是索引?
索引分别有哪些优点和缺点?
为什么 MySQL 官方建议使用自增主键作为表的主键?
自增主键有哪些优缺点?
索引有几种类型?分别如何创建?
主键索引和唯一索引区别?
在 InnDB 中主键索引为什么比普通索引的查询性能高?
什么叫回表查询?
如何查询一张表的所有索引?
MySQL 最多可以创建多少个索引列?
如何让 like %abc 走索引查询?
什么是索引?
- MySQL中的一种获取数据的数据结构。(快速查找排好序的一种数据结构)
索引分别有哪些优点和缺点?
- 创建唯一性索引,可以保证数据库表中每一行数据的唯一性(优点)
- 加快数据的检索速度
- 可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义
- 在使用分组和排序子句进行数据检索时减少时间。
- 创建索引维护索引需要耗费时间,这种时间会随着数据量的增加而增加(缺点)
- 索引需要占物理空间。
- 表中数据频繁修改时,索引也要动态维护。
为什么 MySQL 官方建议使用自增主键作为表的主键?
- 自增主键可以避免页分裂
- mysql(innoDB引擎)底层数据结构是B+树,一个表有多少索引就会有多少个B+树,mysql中的数据都是按顺序保存在B+树上的(索引本身是有序的,将随机I/O变成有序I/O)
- mysql底层又是数据页为单位来存储数据(一个数据页默认16K)。
- 自增主键直接把页装写满,再添加数据,直接去申请一个新的数据页即可。
- 非自增主键(保证索引有序性),每次插入都需要放到合适的位置,造成数据会调整到其他数据页上,造成页分裂。
自增主键有哪些优缺点?
- 自动增长,顺序存放,检索有利。(优点)
- 数字型,占用空间小,易排序。
- 手动插入id时麻烦(缺点)
索引有几种类型?分别如何创建?主键索引和唯一索引区别
索引(逻辑分类索引) | 解释 | 创建方式 |
---|---|---|
主键索引(只能有一个) | 不为空,不重复 | alter table tb add primary key add("id ") |
唯一索引(可多个索引) | 不重复,可空,只能包含一列 | alter table tb add unique("username ") |
普通索引(可多个) | 重复,可空 | alter table tb add index_name("username ") |
全文索引 | 搜索关键词更高效 | alter table tb fulltext(”username “) |
索引(物理分类索引) | 解释 | 优势 |
---|---|---|
聚集索引 (一个) | 一般是表中的主键索引,if(主键),else if(第一个唯一索引),else(innoDB引擎为每行数据内置的6字节row-id ) | 精确查找、范围查找有比较好的性能(相对于普通索引和全表扫描) |
非聚集索引(可以多个) | 该索引中的索引逻辑顺序与磁盘上的物理存储顺序不同(非主键的那一列) |
在 InnDB 中主键索引为什么比普通索引的查询性能高?
原因
为什么这段还是得在高性能MySQL中找答案,之后做好笔记。。
什么叫回表查询?
先通过普通索引的值定位聚簇索引值,再通过聚簇索引的值定位行记录数据,需要扫描两次索引B+树,它的性能较扫一遍索引树更低。
详细解答
如何查询一张表的所有索引?
mysql> show keys from table_name;
MySQL 最多可以创建多少个索引列?
- mysql中提到,一个表最多16个索引,最大索引长度256字节.
如何让 like %abc 走索引查询?
下次来下次解答。