小标
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
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号