SQL优化实战之加索引
有朋友和我说他的虚机里面的mysql无法跑sql,但是在本地环境是这个sql是可以跑出来的。碰到这个问题第一反应是:死锁。
于是让他查询数据库的几个状态:

发现连即时锁都非常少,不是锁的问题。
进一步排查,是否是系统瓶颈造成。
使用top命令,发现了端倪:

这是一个单核的服务器,cpu这么高,绝对有问题。登上mysql,发现只有14个线程,但都是在执行下面这个语句:
select XX from orders c, area a, city y, province p, customers s, salers sa, sys_user us where s.areaID = a.areaID and s.provinceID = p.provinceID and s.cityID = y.cityID and c.customerid = s.id and c.salerid = sa.id and c.creatorid = us.USERID and DATE_FORMAT(c.createtime,'%Y-%m-%d') >= '2016-06-01' and DATE_FORMAT(c.createtime,'%Y-%m-%d') <= '2016-06-30' order by c.statetime desc limit 0 , 10 ;
这些线程的状态都是:Copying to tmp table 表的数据量并不大:

首先调整了tmp_table_size有16M调整为160M。状态依然存在。
随后执行 mysql>flush tables;尝试清掉进程,此操作被卡住;
只能执行 mysql>kill pid号,kill掉查询进程;
查看该语句的执行计划。发现全部是全表扫描,于是首先尝试在大表的关联字段上加索引:
alter table area add index ind_areaid(areaid);
alter table city add index ind_cityid(cityid);
再次查询,结果非常快了。除了加索引,这个SQL本身也是需要优化的。
多表关联不是MySQL的强项。需要拆分成多个三个表以内的多表关联。
加两个索引解决问题。
SQL优化实战之加索引的更多相关文章
- SQL优化(三)—— 索引、explain分析
SQL优化(三)—— 索引.explain分析 一.什么是索引 索引是一种排好序的快速查找的数据结构,它帮助数据库高效的查询数据 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据 ...
- SQL优化笔记一:索引和explain
目录 为什么需要优化SQL SQL优化的重点 索引 索引的结构 索引的优缺点总结: 索引的分类 索引操作 B树 实战 问题 数据库方面,我会使用MySQL来讲解 为什么需要优化SQL 性能低,执行时间 ...
- SQL优化 MySQL版 - 避免索引失效原则(二)
避免索引失效原则(二) 注:继上一篇文章继续讲解: 避免索引失效原则(一)https://www.cnblogs.com/StanleyBlogs/p/10482048.html#4195062 作者 ...
- SQL优化 MySQL版 - 避免索引失效原则(一)
避免索引失效原则(一) 精力有限,剩余的失效原则将会在 <避免索引失效原则(二)>中连载出来,请谅解 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 避免索引失效的一些原 ...
- 记一次sql优化——left join不走索引问题
sql一执行就卡住,然后就...杀进程了 看了一下表的大小 第一反应就是加索引,然后explain看了一下走什么索引了,结果很尴尬,三个表,只走了一个索引...一群人在那纠结为毛走不了索引. 无意间发 ...
- mysql SQL优化琐记之索引
equal最好了,其次in,最后是range != <> 这类非操作尽量不用,它会转换为range.>都是范围查询 复合索引有左匹配原则,(clo_a,clo_b)相当建立了两个 ...
- Hive使用Calcite CBO优化流程及SQL优化实战
目录 Hive SQL执行流程 Hive debug简单介绍 Hive SQL执行流程 Hive 使用Calcite优化 Hive Calcite优化流程 Hive Calcite使用细则 Hive向 ...
- sql优化实战:从1353秒到135秒(删除索引+修改数据+重建索引)
最近在优化日结存储过程,日结存储过程中大概包含了20多个存储过程. 发现其有一个存储过程代码有问题,进一步发现结存的数据中有一个 日期字段business_date 是有问题的,这个字段对应的类型是v ...
- MySQL性能优化 - 别再只会说加索引了
MySQL性能优化 MySQL性能优化我们可以从以下四个维度考虑:硬件升级.系统配置.表结构设计.SQL语句和索引. 从成本上来说:硬件升级>系统配置>表结构设计>SQL语句及索引, ...
随机推荐
- java 线程Thread 技术--方法演示生产与消费模式
利用wait 与notifyAll 方法进行演示生产与消费的模式的演示,我们两个线程负责生产,两个线程消费,只有生产了才能消费: 在effective Java 中有说过: 1. 在Java 中 ,使 ...
- spring源码分析(一)
一.首先分析AliasRegistry接口. 1.Alias别名,Registry注册表,AliasRegistry别名注册表接口. 2.共有四个方法,注册别名,判断是否别名,获取别名数组,移除别名. ...
- linux下查看配置信息命令
# uname -a # 查看内核/操作系统/CPU信息# head -n 1 /etc/issue ...
- volley的post请求
//volley发送post请 2 private void volleypost() { 3 String url = "http://apis.juhe.cn/idcard/index? ...
- ios 错误纪录
.self.出不来的原因 Member reference type 'struct objc_class *' is a pointer; maybe you meant to use '-> ...
- mysql8 公用表表达式CTE的使用
公用表表达式CTE就是命名的临时结果集,作用范围是当前语句. 说白点你可以理解成一个可以复用的子查询,当然跟子查询还是有点区别的,CTE可以引用其他CTE,但子查询不能引用其他子查询. 一.cte的语 ...
- mysql命令行导入结构化数据
数据样本 103252765-|--|-stephanie_mt@hotmail.com-|-o/35+nGaNEU=-|-ion|-- 其中|为分隔符,每行的换行符\n mysql -uroot M ...
- nginx与php-fpm原理
一.正向代理与反向代理 1.正向代理:访问google.com google.com vpn需要FQ才能访问 vpn 对于我们来说是可以感知到的(我们连接vpn),但对于google服务器是不知道 ...
- (转)EasyUI 分页总结
最近用到了easyui的分页和搜索栏功能,使用过程中由于运用不熟练导致其间也出现过一些问题,下面做个小结,供大家共同学习.1.首先使用EasyUI 的DataGrid分页,得加载其js类库:< ...
- (转)easyui datagrid 部分参数说明
easyui datagrid 部分参数 数据表格属性(DataGrid Properties) 属性继承控制面板,以下是数据表格独有的属性. 名称 类型 描述 默认值 columns array 数 ...