MYSQL索引总结篇
为什么要使用索引
1.当你在茫茫人海中寻找一个人,比如说他的名字是xxx,你不得不挨个问过去,很麻烦,所以要给它一个索引
索引的结构
- B+树(最常用,前面的博客有细讲,支持范围查询
- 哈希表 精准度很高,因为一个哈希值仅仅对应一个或几个数据
索引分类与使用
聚集索引与二级索引
聚集索引可以理解为主键,找到id之后下面的row就挂着它对应的数据,直接根据id查,只需要查一次,性能比较快
二级索引就是,非主键查询,比如说根据username,查询user的所有信息,流程是什么呢,首先,去二级索引那一棵树上,通过用户名,拿到id,但是还没完,再拿着id,去聚集索引查询,相当于查两次,所以说性能比较慢,那么有没有更好的方式呢,那当然
单列索引和联合索引
-
单列索引直接跟着字面意思理解,就是某个索引直接对应某个字段
-
联合索引就是,多个字段联合起来,共用一个索引
有什么用呢,比如说,你想根据name来查询身份证号,那么按照以往情况,要用二级索引,查两次,但是,现在有联合索引,只要通过二级索引查一次就ok了,联合索引的本质也是一个二级索引,但是,有个误区就是,想说通过id来查询联合索引对应的字段,其实多此一举了,直接主键查询,聚集索引
但是捏,聚集索引也有它需要注意的点
就是最左前缀法则,就是最左边的那个字段一定要在,不然会引发索引失效
那还有什么情况会引发索引失效呢,首先就是别傻傻的在字段上上进行函数运算操作,接着就是字符串没加引号也会导致索引失效
前缀索引
比如说,你想根据文章内容,查询跟文章有关的某个信息,文章内容是不是贼大?要是直接以它为二级索引,数据库是不是会炸掉?所以说是不是可以裁减相应一部分,这就引出了前缀索引
就直接裁剪该字段的前几个值,作为索引,那么就涉及到一个调参问题,要裁剪几个呢? 有一个公式,区分度吧可以这么理解,就是 区分度Q=不同索引个数/总数,所以说Q值越大,区分度越高,但是虽然说区分度高的话比较精确,但是维护成本会相对来说高一些,所以就要权衡利弊,协调好
标签:总结,二级,聚集,id,索引,查询,区分度 From: https://www.cnblogs.com/cjtaaa/p/18102078