qq_36949630
qq_36949630
2018-08-06 01:45
采纳率: 61.5%
浏览 4.7k

spring+mybatis 查询慢

同样一条sql
使用navicat 查询 只要0.05秒
但是在代码中使用mybatis查询 要4-5秒
这是什么原因?
图片说明

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • qq_29777207
    张音乐 2018-08-06 06:12
    已采纳

    影响查询效率的因素要知道,
    第一,排除一下查询条件menu_id和new_type的索引是不是加上了,
    第二,有索引的情况下看看是不是有NULL的值,有NULL的话会进行全表扫描,
    第三,数据量大的时候,order by 也会降低速度,看看create_time是什么类型,如果是varchar类型会慢。
    第四,你navicat里面加了limit 10了,查询当然快啦。
    第五,经过mybatis的封装,程序查询结果返回确实要慢点,但是4-5秒有点不合理了,如果数据量不大的话。
    第六,可以使用Redis缓存。

    点赞 评论
  • batterMRTAN
    batterMRTAN 2018-08-06 02:00

    你打印下程序执行sql的日志放到工具执行试试,不然就是你代码问题了

    点赞 评论
  • qq_36949630
    qq_36949630 2018-08-06 02:03

    图片说明

    点赞 评论
  • qq_36949630
    qq_36949630 2018-08-06 02:07

    图片说明

    点赞 评论
  • weixin_37893887
    玄尺 2018-08-06 02:22

    看起来没什么问题,看时间也确实卡在数据库执行上,存在并发吗?

    点赞 评论
  • baidu_41241241
    一心向善_ 2018-08-06 05:51

    那就加缓存,加索引,这是解决慢最常用也是最好的方式

    点赞 评论
  • weixin_37893887
    玄尺 2018-08-06 01:53

    理论上是不可能的,mybatis只是一个jdbc封装。如果能够确定sql没问题,建议从下面几个角度检查:
    1、将mybatis的debug日志打开,打印出执行sql,对比看看是不是sql写错了,特别注意整数和字符串的区别,比如status是整数,那就绝对不能带引号,这样就不会走索引了
    2、执行一条其他sql,看看使用navcat和mybatis执行是否有区别

    点赞 评论

相关推荐