首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一次查询导出的优化

先看效果 为了查看慢的地方,添加了一些日志记录。其中遍历1w次便会输出一次时间。 优化前 优化后 优化后 背景 报表的查询导出功能,查询导出使用同一方法获取数据。...}); `` 其中 wobTrackingList也是提前查询出来的。看似都在内存中计算,应该会很快的。但是忽略了两点。...1、Where 运算实际上是查询运算,虽然别人给我们封装好了,单次调用速度很快,但是也比赋值加减运算要慢。2、wobTrackingList中的数据量很可能比外层遍历的数据还要大。...尽量减少循环中的复杂逻辑,只做简单的取值赋值,判断和计算。 循环中处理数据,特别是耗时严重的操作(如查询数据库),要考虑好循环可能出现的次数。 循环中内存取值,用字典要比list效率高。...面对可能出现1w次循环的地方一定要多思考,多检查代码。

64710

一次神奇的 SQL 查询经历

来源:cnblogs.com/dijia478/p/11550902.html ---- 一、问题背景 现网出现慢查询,在500万数量级的情况下,单表查询速度在30多秒,需要对sql进行优化,sql...我在测试环境构造了500万条数据,模拟了这个慢查询。 简单来说,就是查询一定条件下,都有哪些用户的。很简单的sql,可以看到,查询耗时为37秒。...那就是sqlyog的问题了,现在也不清楚sqlyog是不是做什么优化了,这个慢查询的问题还在解决中(我觉得问题可能是出在mysql自身的参数上吧)。...所谓的sqlyog查询快,命令行查询慢的现象,已经找到原因了。是因为sqlyog会在查询语句后默认加上limit 1000,所以导致很快。这个问题不再纠结。 2....最后再对比下改前后的执行计划: 改之前(查询要1分钟左右): ? 改之后(查询只要几百毫秒): ? (完) 干货分享 最近将个人学习笔记整理成册,使用PDF分享。

37110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    如何完成一次快速的查询

    谁不想完成一次快速的查询? 1. MySQL查询慢是什么体验? 大多数互联网应用场景都是读多写少,业务逻辑更多分布在写上。对读的要求大概就是要快。那么都有什么原因会导致我们完成一次出色的慢查询呢?...对于非聚簇索引,是要回表的。假如有 100 条数据,在 sex 字段建立索引,扫描到 51 个 male,需要再回表扫描 51 行。还不如直接来一次全表扫描呢。...1.6 大表场景 在未二次开发的 MYSQL 中,上亿的表肯定算大表,这种情况即使在索引、查询层面做到了较好实现,面对频繁聚合操作也可能会出现 IO 或 CPU 瓶颈,即使是单纯查询,效率也会下降。...Term Dictionary 就像二级索引,但 MySQL 是保存在磁盘上的,检索一个 term 需要若干次的 random access 磁盘操作。...但它的性能和可靠性非常高,不存在单点故障。 4. 总结 个人觉得软件开发是循序渐进的,技术服务于项目,合适比新颖复杂更重要。 如何完成一次快速的查询?

    1K11

    .NET程序连接Oracle一次执行多行SQL的注意事项

    以前写的基于MSSQL数据库的.NET程序,不用担心SQL语句中的;或者换行符。...但是因为要基于Infor LN的Oracle数据库进行开发,就碰到了;分号和换行的报错,同时一次执行UPDATE的多条更新语句时,也会报错。...Oracle.ManagedDataAccess.Client.OracleException:ORA-00911: invalid character 单行SQL如果有换行时,加了;就报上面的错,多行执行的时候...BPM的移动互联的一点想法 6年做BPM的实施、开发、推广应用的一个小结 从崔牛的2017云图看BPM市场 原创FlowPortal用户手写签名插件:Signature,需要另购手写板...(及手写笔) BPM一夜之间都成了低代码开发平台 我的第一个原创FlowPortal插件:TaskComment,给你的应用增加万能评论功能

    1K30

    记一次详细的的SQL查询经历,group by慢查询优化

    一、问题背景 现网出现慢查询,在500万数量级的情况下,单表查询速度在30多秒,需要对sql进行优化,sql如下: ? 这里测试环境构造了500万条数据,模拟了这个慢查询。...简单来说,就是查询一定条件下,都有哪些用户的。很简单的sql,可以看到,查询耗时为37秒。...五、后续(还未解决) ---- 感谢大家在评论里出谋划策,本人来回复下问题进展: 1.所谓的sqlyog查询快,命令行查询慢的现象,已经找到原因了。...③调整where条件里字段的查询顺序,有索引的放前面。 ④给所有where条件的字段加组合索引。 ⑤用子查询的方式,先查where条件里的内容,再去重。...最后再对比下改前后的执行计划: 改之前(查询要1分钟左右): ? 改之后(查询只要几百毫秒): ?

    1.9K10

    记一次神奇的SQL查询经历,group by慢查询优化

    作者:dijia478 链接:https://www.cnblogs.com/dijia478 一、问题背景 现网出现慢查询,在500万数量级的情况下,单表查询速度在30多秒,需要对sql进行优化,sql...我在测试环境构造了500万条数据,模拟了这个慢查询。 简单来说,就是查询一定条件下,都有哪些用户的。很简单的sql,可以看到,查询耗时为37秒。...五、后续(还未解决) ---- 感谢大家在评论里出谋划策,我来回复下问题进展: 1.所谓的sqlyog查询快,命令行查询慢的现象,已经找到原因了。...③调整where条件里字段的查询顺序,有索引的放前面。 ④给所有where条件的字段加组合索引。 ⑤用子查询的方式,先查where条件里的内容,再去重。...最后再对比下改前后的执行计划: 改之前(查询要1分钟左右): ? 改之后(查询只要几百毫秒): ?----

    1.2K20

    记一次神奇的sql查询经历,group by慢查询优化

    一、问题背景 现网出现慢查询,在500万数量级的情况下,单表查询速度在30多秒,需要对sql进行优化,sql如下: ? 我在测试环境构造了500万条数据,模拟了这个慢查询。...简单来说,就是查询一定条件下,都有哪些用户的。很简单的sql,可以看到,查询耗时为37秒。...思路二: where条件太复杂,没索引,导致查询慢,但其实哪怕where条件不动,只要把group by去掉,就非常快。所以应该也不是where条件的问题。 ?...那看来就是我电脑的问题了。 后来我用多个同事的电脑实验,最后得出的结论是: 是因为我用的SQLyog!...那就是sqlyog的问题了,现在也不清楚sqlyog是不是做什么优化了,这个慢查询的问题还在解决中(我觉得问题可能是出在mysql自身的参数上吧)。

    1.4K20

    一次慢查询暴露的隐蔽的问题

    最近解决了一个生产 SQL 慢查询的问题,排查问题之后发现一些比较隐匿且容易忽略的问题。 业务背景介绍 最近业务上需要上线一个预警功能,需要查出一段时间内交易,求出当前交易成功率。...实际生产运行时却发现每次 SQL 查询需要花费 60 多秒。 系统架构介绍 Spring boot + Mybatis + Oracle。 需要查询的表数量级为亿级。...从日志中我们可以清楚看到实际运行的 SQL,以及查询参数与类型。...从这点那可以看出查询过程索引字段发生一次内联函数转换。 SQL 性能优化往往会有一点,避免在索引字段使用函数。 既然知道原因,那么解决办法也没有这么难了。我们将查询 sql 改为如下就能解决。...我们可以看到,确实发生了一次内联转化,但是却在另外一边。这次查询走的是索引。 从这个例子我们可以看出,在索引字段上使用函数会导致全表扫描。但是在传入查询参数上使用函数并不会导致索引失效。

    55850

    mysqlbinlog命令详解记一次有函数的标量子查询导致的查询缓慢

    这个专题讲一些日常运维的异常处理 今天讲一个SQL 语句,他有很多标量子查询,其中有的是使用了函数 1. 现象 开发人员反映有条语句非常慢 ? 2. 原因查找 2.1 查看整体执行计划 ?...可以看出语句非常简单,由于 from后的表没有任何where条件 估算的是一行,实际看下了下有9000+的数据,单独查询1s不到 总体执行下来需要10分钟 接下来我们需要知道慢在哪里 2.2 找出慢的地方...这里我们采用笨的方法,注释掉其他的标量子查询只用其中一个 这时我们可以找出DCWIP.GET_WIRETYPE(CONTROL_LOT)这段占用了绝大多数的时间 到这里我们知道可能的原因是该语句循环执行了该函数近...10000次导致 这里我们通过查看awr报告也证明了这点 2.3 优化函数 这时我们打开该函数,发现非常简单,里面有2个语句,将参数带进去,我们查看执行计划 ?...优化成果: 由于这是一个报表,还有其他语句,但是总体时间从原来的40分钟下降到15分钟 达到预期效果

    48710

    一次由查询转换引起的性能问题的分析

    但是,相对于查询转换(Query Transformation)相关技术的介绍,与其重要度相比相关技术的介绍就比较少。今天要说明的就是查询转换相关的问题。...首先,可以通过Legend了解到产生了哪种查询转换。 ? 可以看到,Oracle 11g里比Oracle 10g 使用了更多的查询转换。Oracle每次的版本更新都会带来查询转换领域的不断更新。...下面的信息可以明确的看到,Oracle 10g里尝试把主查询块(SEL$1)里存在的连接谓词(Join Predicate)推入到内嵌视图的查询块(SEL$2)里,但是因为GROUP BY 语句失败了。...我们看了几个在查询转换(Query Transformation)中非常典型的连接谓词推入的例子。希望在实践中不断进行尝试,来加深对查询转换的理解。优化过程中,经常会问自己为什么不选择索引呢?...对查询转换的认识越深,对执行计划的理解也会变得越来越深,对SQL优化也会变得加更体系化。 ?

    1.1K50

    MYSQL数据库-复合查询

    MYSQL数据库-复合查询 零、前言 一、基本查询 二、多表查询 三、自连接 四、子查询 1、单行子查询 2、多行子查询 3、多列子查询 3、在from子句中使用子查询 五、合并查询 1、union 2...、union all 零、前言 本章主要讲解学习MYSQL数据库中的复合查询,前面我们讲解的mysql表的查询都是对一张表进行查询,在实际开发中这远远不够 一、基本查询 示例: 查询工资高于500...示例:显示SMITH同一部门的员工 2、多行子查询 返回多行记录的子查询 示例: in关键字:查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含10自己的 all关键字...:显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号 any关键字:显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号(包含自己部门的员工) 3、多列子查询 单行子查询是指子查询只返回单列...,单行数据;多行子查询是指返回单列多行数据,都是针对单列而言的,而多列子查询则是指查询返回多个列数据的子查询语句 示例:查询和SMITH的部门和岗位完全相同的所有雇员,不含SMITH本人 3、在from

    13.2K30

    高并发下如何完成一次快速的查询

    MySQL 查询慢是什么体验? 大多数互联网应用场景都是读多写少,业务逻辑更多分布在写上。对读的要求大概就是要快。那么都有什么原因会导致我们完成一次出色的慢查询呢?...对于非聚簇索引,是要回表的。假如有 100 条数据,在 sex 字段建立索引,扫描到 51 个 male,需要再回表扫描 51 行。还不如直接来一次全表扫描呢。...1.6 大表场景 在未二次开发的 MYSQL 中,上亿的表肯定算大表,这种情况即使在索引、查询层面做到了较好实现,面对频繁聚合操作也可能会出现 IO 或 CPU 瓶颈,即使是单纯查询,效率也会下降。...Term Dictionary 就像二级索引,但 MySQL 是保存在磁盘上的,检索一个 term 需要若干次的 random access 磁盘操作。...但它的性能和可靠性非常高,不存在单点故障。 4. 总结 个人觉得软件开发是循序渐进的,技术服务于项目,合适比新颖复杂更重要。 如何完成一次快速的查询?

    96630

    【重学 MySQL】四十一、子查询举例与分类

    在SELECT子句中引入子查询 子查询可以用在SELECT子句中作为列的一部分,返回单个值或多个值(但通常作为单个值使用,并可能需要聚合函数)。...列子查询 定义:列子查询返回的结果集是一列多行。 举例:查询没有参与过某个项目的员工信息。...表子查询 定义:表子查询返回的结果集是多行多列,可以看作是一个临时的表,在外部查询中作为FROM子句的一部分。 举例:查询库存量少于订单所需量的产品。...了解子查询可以放置的位置有助于编写更灵活的查询语句。 子查询的返回类型 标量子查询:返回单个值(单行单列),常用于比较操作。 列子查询:返回一列多行,常用于IN、ANY、ALL等操作符中。...相关性 相关子查询:子查询的结果依赖于外部查询的结果。这种子查询在每次外部查询处理一行时都会重新执行。 不相关子查询:子查询的结果不依赖于外部查询的结果。这种子查询在整个外部查询执行前只执行一次。

    12410

    PLSQL 基础教程 三 查询(SELECT)

    SELECT是SQL中使用的比较多的,主要是用于筛选数据,获取满足某些条件的数据,既可以是单条数据,也可以是多条数据,还可以是统计数据或者分组数据等等,后续教程将会一一介绍。 1....实际使用中,在某个查询语句中,如果需要使用子查询,则可以使用小括号 () 将某个查询括起来,作为外部查询的嵌套查询语句,该括号括起来的部分就叫做“子查询” 子查询的类型 子查询也是一个小的查询结果集,既可以返回多行数据...,也可以返回单行数据。...位于FROM中的子查询,是将子查询的结果作为一个“表”来使用的,此时的子查询既可以选取多列,也可以返回多行,和使用表没有区别: 位于WHERE条件中的子查询,可以返回单一列的多行或者一行记录,具体的情况需要和前边的过滤条件相匹配...,对于“=”子查询的情况只能返回一行;对于“IN”子查询的情况,可以返回一行或者多行记录 示例: “=”子查询的情况 SELECT N.EMPNO, N.ENAME, N.JOB, N.DEPTNO

    4.5K10

    MYSQL 从项目经理的一次查询,到MYSQL 查询语句优化方法多

    事情的起因是,我们的一个项目经理需要对一个数据库的信息进行查询,SQL 人家都会写的。...SAP_PO_IND='T') 已摊销 from tb_sync_contract c where 1=1 and c.ACT>='2020-06-01' and c.ACT<='2020-06-30' ; 查询计划在下面...我们对于这样的表进行了SQL 查询的改写,但结果一般 1 方法,驱动表的位置的变换 我们将小的表放到了驱动表的位置,大表放到了下面 ?...结果并没有好转 2 方法,尝试通过再次减小驱动表的方式来加速查询 select a.AP,a.CONTR,a.ACTIVEDATE,a.term,sum(b.AMORTIZEAMT) as ‘以’...3 方法,将合同表的数据直接导入到新的表中,基本是不到4万条数据,但和2000万的表进行查询,速度还是很慢 select a.APP,a.CONT,a.ACTIE,sum(b.AMOT) as ‘以’

    1K20

    MySQL:复合查询

    此篇博客讲解MySQL中的复合查询。前面一直讲的都是一些基础的查询语句,但是显然是不能满足需求的,所以此篇博客讲解更为复杂的查询语句。 一....自连接 自连接是指在同一张表连接查询。 显示员工ford的上级领导的编号和姓名 子查询 使用多表查询(自连接) 四....子查询 子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询。...4.1 单行子查询 返回一行记录的子查询 显示smith同一部门的员工 4.2 多行查询 返回多行记录的子查询 in关键字;查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含...、工资和部门号(包含自己部门的员工) 4.3 多列子查询 单行子查询是指子查询只返回单列,单行数据;多行子查询是指返回单列多行数据,都是针对单列而言的,而多列子查询则是指查询返回多个列数据的子查询语句

    10710
    领券