[仅供个人参考系列]MySQL笔记整理

索引(存储引擎层的实现):

1.频繁更新列不适合建立索引

2.索引设计是一个不断尝试与权衡的过程

3.覆盖索引(1.直接从索引拿数据、加速sort,count(*))、聚集索引(clustered index, 非聚集索引:注意区别),科普文章

4.索引设计工具(explain,show profling, show log, sql hits)

5.order by后面即使不是索引的最左前缀,但是只要它为索引的第1列定义了等于条件,也可以,如

select a, b from table where id=1 order by name, add;其中索引为 (id, name, add),这时也可以用索引,常数+后面的列一起形成最左前缀

6.注意这种情况:

索引:(a, b)

 where a='x' order by b; 用到索引(a,b)中的a

 where b='x' order by a;用不到索引

其他索引失效的情况举例

7.唯一索引与普通索引的区别与联系(查询基本没区别,重点在更新上,涉及到change_buffer。参考文章1;参考文章2;参考文章3)

覆盖索引:

如果查询的列恰好是索引的一部分,那么查询只需要在索引文件上进行,不需要回行到磁盘查找数据(不需要回表查)

 

聚集索引:

本质上是一种存储数据的方式而非索引类型,具体如下图:

[仅供个人参考系列]MySQL笔记整理_第1张图片

 

索引分类:

[仅供个人参考系列]MySQL笔记整理_第2张图片

 

其中:

主键索引也是唯一索引,区别在于:

主键索引:创建表时创建好;主键约束;不允许空值;一定包含一个唯一索引;

唯一索引:随时可创建

 

索引中filesort和using index的区别:

你可能感兴趣的:(个人笔记)