mysql性能检测02

今天我们再来研究一下mysql,探讨一下平常常用的sql语句是否有值得优化的地方。例如说我想查找表中重复的数据,一般我们会这样写,例如我们要查询sname这个字段重复的,一般我们会利用groupby来先分组,然后用having为我们筛选分组后的各组数据。

SELECT
 s.id,s,sno,s.sname
FROM
 student s
WHERE s.sname IN
  (SELECT
    t.sname
  FROM
    student t
  GROUP BY t.sname
  HAVING COUNT(t.sname) > 1)

在数据量极少的情况这样写是ok的,前提当数据量达到数十万甚至百万级别,你会发现groupby效率极其低下,所以一般我们会对分组字段添加索引。那么我们来加上索引后看看情况如何,我们就使用一般索引

---未加索引
共 20 行受到影响

执行耗时   : 7.062 sec
传送时间   : 0.003 sec
总耗时      : 7.066 sec
---添加索引后
共 20 行受到影响

执行耗时   : 1.118 sec
传送时间   : 0.003 sec
总耗时      : 1.122 sec

测试数据是50w条,添加和不添加索引,对比是明显的,时间接近相差了6-7倍。可想而知,当数据达到百万级别时的效率了。
那么我们能不能再优化呢?要不写个存储过程,尽管试试。

SELECT a.id,a.sno,a.sname FROM (SELECT
   sname
 FROM
   student 
 GROUP BY sname
 HAVING COUNT(sname) > 1) tmp
 INNER JOIN student a
   ON tmp.`sname` = a.`sname`
---未加索引时
共 20 行受到影响

执行耗时   : 6.456 sec
传送时间   : 0.003 sec
总耗时      : 6.460 sec
---添加索引后
共 20 行受到影响

执行耗时   : 0.269 sec
传送时间   : 0.003 sec
总耗时      : 0.273 sec

结果还是比较能接受的,当然这个未必是最优解,有同学有更好的想法可以给下思路。其实一般优化思路从两方面入手,最基本的是语句,再者就是索引。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • MySQL性能调优 索引 索引是什么 官方介绍索引是帮助MySQL高效获取数据的数据结构。笔者理解索引相当于一本书...
    陈小陌丿阅读 1,540评论 0 4
  • 一、MySQL优化 MySQL优化从哪些方面入手: (1)存储层(数据) 构建良好的数据结构。可以大大的提升我们S...
    宠辱不惊丶岁月静好阅读 2,654评论 1 8
  • 为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引...
    没有故事的老大爷阅读 477评论 0 1
  • 前生 也许森林 也许草原 也许村庄 怎的,变成 今世的流沙了 是否 因风 因雨 因人对大自然的蹂躏 于是 你愤怒如...
    微迅阅读 397评论 10 47
  • 今天把热水壶拿进教室,一不小心碰到了旁边最热的地方,下意识的手缩了回去。瞬间想到了老师大声喊着...
    善水100阅读 497评论 0 1

友情链接更多精彩内容