有朋友和我说他的虚机里面的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优化实战之加索引的更多相关文章

  1. SQL优化(三)—— 索引、explain分析

    SQL优化(三)—— 索引.explain分析   一.什么是索引 索引是一种排好序的快速查找的数据结构,它帮助数据库高效的查询数据 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据 ...

  2. SQL优化笔记一:索引和explain

    目录 为什么需要优化SQL SQL优化的重点 索引 索引的结构 索引的优缺点总结: 索引的分类 索引操作 B树 实战 问题 数据库方面,我会使用MySQL来讲解 为什么需要优化SQL 性能低,执行时间 ...

  3. SQL优化 MySQL版 - 避免索引失效原则(二)

    避免索引失效原则(二) 注:继上一篇文章继续讲解: 避免索引失效原则(一)https://www.cnblogs.com/StanleyBlogs/p/10482048.html#4195062 作者 ...

  4. SQL优化 MySQL版 - 避免索引失效原则(一)

    避免索引失效原则(一) 精力有限,剩余的失效原则将会在 <避免索引失效原则(二)>中连载出来,请谅解 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 避免索引失效的一些原 ...

  5. 记一次sql优化——left join不走索引问题

    sql一执行就卡住,然后就...杀进程了 看了一下表的大小 第一反应就是加索引,然后explain看了一下走什么索引了,结果很尴尬,三个表,只走了一个索引...一群人在那纠结为毛走不了索引. 无意间发 ...

  6. mysql SQL优化琐记之索引

    equal最好了,其次in,最后是range !=  <>  这类非操作尽量不用,它会转换为range.>都是范围查询 复合索引有左匹配原则,(clo_a,clo_b)相当建立了两个 ...

  7. Hive使用Calcite CBO优化流程及SQL优化实战

    目录 Hive SQL执行流程 Hive debug简单介绍 Hive SQL执行流程 Hive 使用Calcite优化 Hive Calcite优化流程 Hive Calcite使用细则 Hive向 ...

  8. sql优化实战:从1353秒到135秒(删除索引+修改数据+重建索引)

    最近在优化日结存储过程,日结存储过程中大概包含了20多个存储过程. 发现其有一个存储过程代码有问题,进一步发现结存的数据中有一个 日期字段business_date 是有问题的,这个字段对应的类型是v ...

  9. MySQL性能优化 - 别再只会说加索引了

    MySQL性能优化 MySQL性能优化我们可以从以下四个维度考虑:硬件升级.系统配置.表结构设计.SQL语句和索引. 从成本上来说:硬件升级>系统配置>表结构设计>SQL语句及索引, ...

随机推荐

  1. Bootstrap(2) 排版样式

    1.页面主体,Bootstrap 将全局 font-size 设置为 14px,line-height 行高设置为 1.428(即20px):<p>段落元素被设置等于 1/2 行高(即 1 ...

  2. maven构建ssh工程

    1.1 需求 在web工程的基础上实现ssh工程的创建,规范依赖管理. 1.2 数据库环境 使用之前学习hibernate创建的数据库:    1.3 创建父工程 选择创建Maven Project ...

  3. EF 更新实体 The instance of entity type 'BabyEvent' cannot be tracked because another instance

    加上AsNoTracking. 人不能两次踏入同一条河. 我 就踏入了.o(╥﹏╥)o

  4. storage封装

    storage.js /* storage 主要放项目中的storage相关操作:存取等 */ var storage = { /** 对本地数据进行操作的相关方法,如localStorage,ses ...

  5. mysql 查看mysql相关信息

    登入数据库的时候: select @@version; select version(); 复制代码 mysql> select @@version; +-----------+ | @@ver ...

  6. CF Round #510 (Div. 2)

    前言:没想到那么快就打了第二场,题目难度比CF Round #509 (Div. 2)这场要难些,不过我依旧菜,这场更是被\(D\)题卡了,最后\(C\)题都来不及敲了..最后才\(A\)了\(3\) ...

  7. centos7 下安装mongodb指南;

    1.下载:https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.4.1.tgz; 2.解压缩; 3.文件存储在mongodb文件 ...

  8. tmux 快捷操作

    -- 基本使用 tmux   # 运行 tmux -2 以256终端运行 C-b d  # 返回主 shell , tmux 依旧在后台运行,里面的命令也保持运行状态 tmux ls # 显示已有tm ...

  9. 类名.class 与 类名.this 详解

    类名.class 与 类名.this 详解 今天在看 PropertyPlaceholderConfigurer 源码时,突然看到一个 PropertyPlaceholderConfigurer.th ...

  10. file-downloader相关问题

    2017-05-24 file-downloader框架中,如果你想用FileDownloader中的createAndStart(String url, String saveDir, String ...