您的位置:首页 > 数据库 > MySQL

MySQL慢查询优化最佳实践(一)

2016-07-22 14:17 337 查看
慢查询我们知道,一般的应用系统,MySQL的读写比例在10:1左右,而且一般的插入和更新操作很少会出现性能问题,遇到问题最多的,也是最容易出现问题的,还是一些复杂的查询操作,所以查询语句的优化已经成为开发、运维工程师们的必须课,是大部分运维工作之中的重中之重。

索引原理数据库建立索引的目的是为了提高查询效率,索引如同生活中的字典、列车时刻表、图书目录一样,原理都相同,都是通过不断缩小想要获得的数据范围来筛选出最终想要的结果,把本来是随机查询的事件变成有序的事件,如我们在字典里查“mysql”单词,如果不建立索引,得从头翻到尾,想想是不是很恐怖!而我们会先选择查询m开头再查y字母范围内的单词,最后一个个定位到mysql。索引建立的深层原理涉及到磁盘的IO与预读、索引的数据结构b+树、b+树的性质和查找过程等等,运维只要有一个感性的认识,并不需要理解的非常透彻和深入。
建立索引的几大原则1)最左前缀匹配原则:mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整;2)索引数量并不是越多越好,索引也要占用空间,且没增加数据都要维护索引,尽量扩展索引,不要新建索引;3)在唯一值多的大表上建立索引,唯一值的公式是count(distinct col)/count(*),表示字段不重复的比例,比例越大我们扫描的记录数越少,如select count(distinct user) from mysql.user;
查询优化神器--explain
explain简单地说就是能够模拟查询过程,分析使用到的和可能使用到的索引列,及最终查询的rows数,通过降低核心指标rows数起到对mysql查询语句优化的结果,当然记得要SQL_NO_CACHE。

本文出自 “改变从每一天开始” 博客,请务必保留此出处http://lilongzi.blog.51cto.com/5519072/1828781
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: