mysql索引优化

原创 2016年05月31日 18:32:59

建立索引的几个注意事项:

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.=和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式
3.尽量选择区分度高的列作为索引,区分度的公式是count(distinct col)/count(*),表示字段不重复的比例,比例越大我们扫描的记录数越少,唯一键的区分度是1,而一些状态、性别字段可能在大数据面前区分度就是0,那可能有人会问,这个比例有什么经验值吗?使用场景不同,这个值也很难确定,一般需要join的字段我们都要求是0.1以上,即平均1条扫描10条记录
4.索引列不能参与计算,保持列“干净”,比如from_unixtime(create_time) = ’2014-05-29’就不能使用到索引,原因很简单,b+树中存的都是数据表中的字段值,但进行检索时,需要把所有元素都应用函数才能比较,显然成本太大。所以语句应该写成create_time = unix_timestamp(’2014-05-29’);
5.尽量的扩展索引,不要新建索引。比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可。

慢查询优化基本步骤

0.先运行看看是否真的很慢,注意设置SQL_NO_CACHE
1.where条件单表查,锁定最小返回记录表。这句话的意思是把查询语句的where都应用到表中返回的记录数最小的表开始查起,单表每个字段分别查询,看哪个字段的区分度最高
2.explain查看执行计划,是否与1预期一致(从锁定记录较少的表开始查询)
3.order by limit 形式的sql语句让排序的表优先查
4.了解业务方使用场景
5.加索引时参照建索引的几大原则
6.观察结果,不符合预期继续从0分析


版权声明:本文为博主原创文章,未经博主允许不得转载。

Mysql索引及优化使用总结

在关系数据库中,索引的使用十分重要,而且所有的关系数据库支持索引机制,因为有了索引之后,在大数据量检索数据时速度很快,性能消耗很低;当然,凡事有利必有弊,增加索引也会增加数据库系统的开销,我们很多时候...
  • why_2012_gogo
  • why_2012_gogo
  • 2016年03月26日 22:23
  • 2123

Mysql数据库优化系列(五)------索引优化策略之面试题

实验: Type:range   此处使用上了范围索引 Key_len:12/3=4列 使用到了索引c1,c2,c3,c4.解析:因为order by c3是有序的,所以c3,c4也用到了索引 ...
  • wuming19900801
  • wuming19900801
  • 2014年12月27日 17:23
  • 1272

MySQL性能调优——索引详解与索引的优化

——索引优化,可以说是数据库相关优化、理解尤其是查询优化中最常用的优化手段之一。所以,只有深入索引的实现原理、存储方式、不同索引间区别,才能设计或使用最优的索引,最大幅度的提升查询效率! 一、BT...
  • zhangliangzi
  • zhangliangzi
  • 2016年05月11日 11:39
  • 12104

MySQL的索引单表优化案例分析

建表 建立本次优化案例中所需的数据库及数据表 CREATE DATABASE db0206; USE db0206;CREATE TABLE `db0206`.`article`( `id` ...
  • github_36379934
  • github_36379934
  • 2017年02月08日 12:13
  • 523

一次 MySQL 索引优化的经历

项目背景:一个类似云盘的工具,主服务器上的 MySQL(InnoDB 引擎) 存储文件 MD5 值,客户端需要在主服务器上查询文件的 MD5 来获取文件所在服务器的 IP 和文件路径。 问题:在...
  • wwh578867817
  • wwh578867817
  • 2016年03月02日 14:41
  • 1633

mysql 索引 优化 面试

mysql 索引 优化 面试题目: 问如何优化下面的Mysql SQL语句? select * from employee where employee.deptName in ( "depart...
  • bigtree_3721
  • bigtree_3721
  • 2017年05月18日 17:37
  • 602

MYSQL优化实践

开源数据库MySQL比较容易碰到性能瓶颈,为此经常需要对MySQL数据库进行优化,而MySQL数据库优化需要运维DBA与相关开发共同参与,其中MySQL参数及服务器配置优化主要由运维DBA完成,开发则...
  • gua___gua
  • gua___gua
  • 2016年08月12日 09:23
  • 428

mysql索引优化面试题

今天被面试到一个mysql索引的问题,没答出来。看了下文后,应该是用复合索引。本文转自:http://www.cnblogs.com/hephec/p/4557053.html建设数据库的优化大概主要...
  • xummgg
  • xummgg
  • 2016年11月06日 20:51
  • 630

MySQL 索引及查询优化

1. MySQL索引的原理 1.1 索引目的 索引的目的在于提高查询效率,可以类比字典,如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从下往下找到y字母,再找到剩下的sql...
  • ltx06
  • ltx06
  • 2016年07月14日 18:14
  • 301

MYSQL [ 优化 --- 分区 ]

MySQL分区概述  在MySQL中,InnoDB存储引擎长期支持表空间的概念,并且MySQL服务器甚至在分区引入之前,就能配置为存储不同的数据库使用不同的 物理路径。分区(partion)更进一步,...
  • jesseshen
  • jesseshen
  • 2011年07月28日 19:48
  • 2696
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mysql索引优化
举报原因:
原因补充:

(最多只允许输入30个字)