摘要:最近项目开发遇到比较复杂,多表连接嵌套查询,做了很多优化。分享一下我调优的经验嵌套查询尽量减少内层查询的结果数嵌套查询能在内层做统计或者聚合多尽量就在内层做聚合,如果内层聚合以后外层仍要聚合,内层多聚合也要做。
最近项目开发遇到sql比较复杂,多表连接嵌套查询,做了很多优化。分享一下我调优的经验:
1、嵌套查询尽量减少内层查询的结果数嵌套查询能在内层做统计或者聚合多尽量就在内层做聚合,如果内层聚合以后外层仍要聚合,内层多聚合也要做。不要为了方便只在外层做聚合,内层结果数对查询效率影响很大。
看下面对两条sql:第一条sql对内层u.travel_id做了聚合,第二条没有在内层做聚合,查询时间相差一倍:
1.第一条sql执行结果,时间50ms:
2.第二条sql执行结果,时间108ms
*也就是说如果columnName建了索引,
这样查询索引可以生效columnName in ("value1","value2"...)也这样用可以,
这样查询索引不能生效 columnName in ( select values from ...)。*
看下面的两条sql的执行计划,dest_id是主键:
1、这条sql索引生效
2、这条没有生效
对于值很少的字段建索引作用不大*,由于通过索引字段筛选之后仍可能有很多记录需要筛选,看下图表dest的abroad字段只有两个值:
1、对abroad不建索引查询:
2、对abroad建索引查询,反而更慢:
总结: 对于sql调优需要对各种方案都执行看具体执行时间,才能判断优劣,还要考虑到有些表数据是一直增长到,已经调好到sql能不能适应数据增长很重要,有些sql调优方案在数据量不大到情况下可能不如另外一种方案,但是数据量增长以后可能就不一样了。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/48043.html
摘要:在库存系统中,最重要的就是要防止超卖。系列创建高性能的索引索引是存储引擎用于快速找到记录的一种数据结构。对查询性能优化最有效的手段。性能优化梳理前言本文主要针对的是关系型数据数据库。用户可以通过特殊的关键字提示优化器,影响的决策过程。 图文并茂详解 SQL JOIN Join 是关系型数据库系统的重要操作之一,一般关系型数据库中包含的常用 Join:内联接、外联接和交叉联接等。如果我们...
摘要:在库存系统中,最重要的就是要防止超卖。系列创建高性能的索引索引是存储引擎用于快速找到记录的一种数据结构。对查询性能优化最有效的手段。性能优化梳理前言本文主要针对的是关系型数据数据库。用户可以通过特殊的关键字提示优化器,影响的决策过程。 图文并茂详解 SQL JOIN Join 是关系型数据库系统的重要操作之一,一般关系型数据库中包含的常用 Join:内联接、外联接和交叉联接等。如果我们...
摘要:编辑大咖说阅读字数用时分钟内容摘要对于真正企业级应用,需要分布式数据库具备什么样的能力相比等分布式数据库,他们条最佳性能优化性能优化索引与优化关于索引与优化的基础知识汇总。 mysql 数据库开发常见问题及优化 这篇文章从库表设计,慢 SQL 问题和误操作、程序 bug 时怎么办这三个问题展开。 一个小时学会 MySQL 数据库 看到了一篇适合新手的 MySQL 入门教程,希望对想学 ...
阅读 799·2021-10-18 13:32
阅读 3215·2021-09-30 09:47
阅读 1977·2021-09-23 11:21
阅读 1704·2021-09-09 09:34
阅读 3340·2019-08-30 15:43
阅读 1398·2019-08-30 11:07
阅读 933·2019-08-29 16:14
阅读 570·2019-08-29 11:06