MySQL数据库高级知识:索引
小标 2018-03-05 来源 :网络 阅读 1508 评论 0

摘要:最近在看MySQL的高级部分知识的东西.先写点关于索引的知识总结吧,

最近在看MySQL的高级部分知识的东西.先写点关于索引的知识总结吧,


因为前段时间把公司正式服务器上的慢SQL都分析了一遍,进行统一的优化,数据库的压力有了明显的降低.性能更加的稳健了.一老一个查询10-30秒的真心收不了啊.


索引嘛,就是一种有序的数据结构,主要是用在查询和排序方面.对于提高查询和排序的速度很有帮助.


从我实际上使用的基本全部都是BTree索引,都是建立的这种索引,只有少数两三个表中的字段建立的是Hash索引.其他的基本上没用过,像full-text,R-BTree.


BTree索引其实就是B+树,Hash所以就是值对应的Hash值了.


总结一下该建立索引的地方:


1.主键唯一索引


2.频繁作为查询条件的列


3.外键关系


4.组合查询用的列,建立多列索引


5.常用来排序的字段


6.统计/分组的字段


不该建立索引的有:


1.数据量都没有超过300行的


2.常增删的字段


3.数据重复且分布比较均匀的列(假设有2000条数据,其中有1980个不同的值,1980/2000=0.99,得到的结果越是接近1越好)


Explain yourSQL在进行sql的分析的时候用的频繁


下面重点说下其中的关键的几个列的解释:


1.id 主要用来查看先查的哪张表的


2.type 访问类型,显示是怎么查询的,全表扫描还是使用索引查询到的


按照结果的好坏排序是:

system>const>eq-ref>ref>range>index>All


就我们而言,最好的是在ref级别,我们一般写的SQL至少也要达到range 级别.尽量避免出现All(全表扫描)的情况


eq-ref:是全表唯一索引


ref:是非唯一性索引,返回单独值所有行


range:是只检索给定范围的行


index:是只遍历索引树(也是全表)


3.keys:实际在搜索的时候用到的索引


4.rows:根据条件找到结果大致的检索的行数,当然越少越好了


5.Extra:其他的一些信息的显示,如using index:使用到了索引,效率蛮好的,多在order by中的出现;


using filesort:无法使用索引完成排序,效率堪忧啊.


using temporary:用到的临时表,,效率堪忧啊.


在建立的索引的时候,看实际情况,也不是一次就能建好的,还要经过多次测试,查看,分析,反复进行.


补充一句,很多时候,多列索引优于单列索引,但不绝对.


说下like检索时候的怎么使用索引吧.


我们有表user,在name,age上面建立多列索引


我们都知道select name,age from user where name like '%zhaojun%' 这种情况是使用了覆盖索引来进行查询效率的提升,比单纯的在在name


本文由职坐标整理并发布,了解更多内容,请关注职坐标MySQL数据库频道!


本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved