将sql语句在数据库查询速度不过1秒都不到在在后台却发现非常慢,通过打印dao方法时间和看mybatis log发现速度确实是很慢不是其他问题,慢就慢在同时有两个字段判断小于等于0所致,有什么好的方法优化一下吗
explain 看执行计划
还是得深入排查,不太可能是mybatis导致的
打印下执行sql查看执行sql在数据库中的执行速度
复杂SQL不建议用orm
开启MyBatis plus SQL日志打印,看看生成的SQL?
(哪俩小于等于0的字段?给的信息不全,无法判断)
数据库的开发客户端,一般只返回结果集的前几十条。如果你返回数据超大。就会出现在客户端执行速度好像很快,实际业务超慢的情况。 还有就是执行计划,开发客户端和应用里面,走了两个不同的执行计划。预编译SQL和写死数值的SQL,执行计划可能完全不一样。 所以优化SQL,必须 真实确认执行计划。
回复@魔力猫 : 正常查验慢sql问题是,使用数据库工具都会设置返回所有结果集,除非博主忘了。关于“预编译SQL和写死数值的SQL,执行计划可能完全不一样。”有没有什么方法,毕竟预编译sql执行计划没地查看
回复看具体数据库了。oracle 就很简单
各位审题审题!“将sql语句在数据库查询速度不过1秒都不到在在后台却发现非常慢”
楼上说得是对的,题主需要的是跑个计划分析。与其在程序里分析SQL语句,不如直接 在数据库里跑一下计划分析或explain。计划分析会告诉你哪一段sql脚本执行的速度,这时再针对于不同的情况采用不同的优化方案这才样会比较好。
跑执行计划分析,这看的出个啥
你先把to_char换成to_date放到表达式右边吧。这是一眼就能看到的错误SQL写法。你所说的数字判断到底是不是拖慢的因素,走一个执行计划分析看一下。
回复@kakai : 包裹整个条件语句应该不需要,只要把特定符号包裹进去,我觉得就行了
回复@kakai : 这个是idea显示效果问题,源码肯定是>=
回复@ycwangrd : 我的idea 2021.3版本没有对xml中的大于小于号做特殊处理,怎么写的怎么显示。
回复@kakai : 已经发现问题了,如果传入参数为Integer类型且值为0时,MyBatis源码中会把0转为空串,字段判断时需要增加 creditAmountL!='' or 0 == creditAmountL"
回复数据库实体类中字段的基本数据类型都应该用其对应的包装类,比如int应该使用Integer
我咋觉得,这个xml配置就是错误的呢?里面sql出现了<>这两种符号,其中一个必然需要使用cddata包裹,xml才不会错误吧?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(18)
explain 看执行计划
还是得深入排查,不太可能是mybatis导致的
打印下执行sql查看执行sql在数据库中的执行速度
复杂SQL不建议用orm
开启MyBatis plus SQL日志打印,看看生成的SQL?
(哪俩小于等于0的字段?给的信息不全,无法判断)
数据库的开发客户端,一般只返回结果集的前几十条。如果你返回数据超大。就会出现在客户端执行速度好像很快,实际业务超慢的情况。 还有就是执行计划,开发客户端和应用里面,走了两个不同的执行计划。预编译SQL和写死数值的SQL,执行计划可能完全不一样。 所以优化SQL,必须 真实确认执行计划。
回复
@魔力猫 : 正常查验慢sql问题是,使用数据库工具都会设置返回所有结果集,除非博主忘了。关于“预编译SQL和写死数值的SQL,执行计划可能完全不一样。”有没有什么方法,毕竟预编译sql执行计划没地查看
回复
看具体数据库了。oracle 就很简单
各位审题审题!“将sql语句在数据库查询速度不过1秒都不到在在后台却发现非常慢”
楼上说得是对的,题主需要的是跑个计划分析。与其在程序里分析SQL语句,不如直接 在数据库里跑一下计划分析或explain。计划分析会告诉你哪一段sql脚本执行的速度,这时再针对于不同的情况采用不同的优化方案这才样会比较好。
跑执行计划分析,这看的出个啥
你先把to_char换成to_date放到表达式右边吧。这是一眼就能看到的错误SQL写法。你所说的数字判断到底是不是拖慢的因素,走一个执行计划分析看一下。
回复
@kakai : 包裹整个条件语句应该不需要,只要把特定符号包裹进去,我觉得就行了
回复
@kakai : 这个是idea显示效果问题,源码肯定是>=
回复
@ycwangrd : 我的idea 2021.3版本没有对xml中的大于小于号做特殊处理,怎么写的怎么显示。
回复
@kakai : 已经发现问题了,如果传入参数为Integer类型且值为0时,MyBatis源码中会把0转为空串,字段判断时需要增加 creditAmountL!='' or 0 == creditAmountL"
回复
数据库实体类中字段的基本数据类型都应该用其对应的包装类,比如int应该使用Integer
我咋觉得,这个xml配置就是错误的呢?里面sql出现了<>这两种符号,其中一个必然需要使用cddata包裹,xml才不会错误吧?