企业宣传,产品推广,广告招商,广告投放联系seowdb

MySQL 索引解析 让查问速度飙升的秘诀!

1.前言

这次小编预备用两篇文章来和大家分享下mysql innodb的索引: mysql的基础常识 和 基于索引的sql优化 。

2. 什么是索引?

定义:索引是数据库中用于极速查找数据的机制,实质是某种数据结构。它存储着指向数据的指针,从而协助数据库跳过不用要的行,间接定位到指标数据,增加扫描期间。

比如咱们看<<三国演义>>刘备三顾茅庐这章,假设没有目录,咱们就须要一篇一篇的翻书,要翻很久,由于不知道在书的哪一页;但是假设有目录,咱们是不是先在目录外面找到这章的目录,这章的目录对应着注释的书页,咱们一下就可以翻到对应的书页,找到对应的章节。目录就相似于mysql的索引。

3. 为什么须要索引?

WHERE 子句中的条件过滤。

ORDER BY 语句启动排序时。

GROUP BY 语句启动分组时。

多表 JOIN 操作时婚配外键或其余关系列。

4. 索引的类型

5. 索引的结构

这里强调一下:innodb只能创立B-Tree 索引,不允许哈希索引。即使创立的时刻选用的是哈希,实践创立之后的结果也是B-Tree,有兴味的同窗可以试试,小编这里就不截图了。

上方,小编用六条数据模拟下索引的结构。首先看下表结构:

而后表外面的数据:

而后看下主键索引的结构,这里是小编依据索引的结构自己画的:

依据这个B+ 树索引结构图,小编便捷的说下:

二级索引

除了主键外,咱们会依据查问的字段,也去建设相应的字段索引。小编这里就不画图了,二级索引的叶子节点放的是对应的主键索引值。

回表

指的是 MySQL 在经过二级索引查找到合乎条件的记载后,还须要回到主键索引中去读取额外的列数据。由于索引只蕴含局部列的消息,假设查问中恳求了索引中未蕴含的列,数据库就须要从主键索引中再次读取完整的行数据。

比如user表中,我给name参与索引,我须要查问name=小九这行数据的消息,由于二级索引是没有完整的数据,所以mysql须要去主键索引外面找到对应的完整数据前往。

笼罩索引

指的是当一个索引齐全蕴含了查问所需的一切列时,MySQL 不须要再回表,而是间接从索引中就可以前往结果。这种状况就称为笼罩索引。

比如user表中,我给name参与索引,我须要查问name=小九这条数据的id,由于id在叶子节点曾经有了,间接就前往了却果,不须要去主键索引再次查问。

笼罩索引的长处:

功能优化:防止了回表,降落了 I/O 和查问期间。增加表扫描:索引的存储比表的数据量小得多,索引扫描比全表扫描快。

6. 总结

© 版权声明
评论 抢沙发
加载中~
每日一言
不怕万人阻挡,只怕自己投降
Not afraid of people blocking, I'm afraid their surrender