mybatis查询日期范围速度慢的原因

下一行code 2014-08-01 02:36:19
mybatis代码如下:

SELECT * FROM server_log s WHERE
(s.createTime >= to_date(#{startTime},'yyyy-MM-DD') and s.createTime <= to_date(#{endTime} ,'YYYY-MM-DD'))
AND
appSerialNumber=#{appNum}
ORDER BY #{attribute}

控制台输出
14:24:53,527 DEBUG PreparedStatement:27 - ==> Executing: SELECT * FROM server_log s WHERE (s.createTime >= to_date(?,'yyyy-MM-DD') and s.createTime <= to_date(? ,'YYYY-MM-DD')) AND appSerialNumber=? ORDER BY ?
14:24:53,528 DEBUG PreparedStatement:27 - ==> Parameters: 2014-07-02(String), 2014-08-01(String), 0002(String), createTime(String)
在执行这个查询的时候特别慢,用秒表粗略计算了下,大约需要160多秒,然后将控制台SQL语句复制到sqldeveloper中手动补全参数后执行,几乎不到3秒就出结果了,在sqldeveloper中执行的SQL语句如下
SELECT * FROM server_log s WHERE (s.createTime >= to_date('2014-07-02','yyyy-MM-DD') and s.createTime <= to_date('2014-08-01' ,'YYYY-MM-DD')) AND appSerialNumber='0002' ORDER BY createTime;

为什么这个语句在mybatis执行的时候会如此的慢,而用sqldeveloper执行却可以这么快的出结果?

没有积分了,后面我再补上!!!
...全文
2626 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
忆赋 2015-10-19
  • 打赏
  • 举报
回复
怀疑是你的数据太多导致的。 正确做法是 把 # 换成 $(这个时候先不考虑防注入了),当然了,参数也要加上 ''。 因为#的时候是预编译(相当于 pre.setString(1,"aaa"),出于防注入的考虑),$的时候是sql的字符串拼接(也就相当于你把sql直接复制过去执行)
  • 打赏
  • 举报
回复
去掉to_date 函数 换成String,把 and 换成 between试试,尝试先把 order by time换成其他字段或者去掉看看。 了解Mybatis 编译sql 的一些原理吧。客户端查询3秒,后台要160秒,不太可能,数据量有多大。
智行天下8 2014-11-25
  • 打赏
  • 举报
回复
我估计是返回的数据记录太多导致的,sqldeveloper默认返回前面一些数据,而你用mybatis返回了所有记录,你用sqldeveloper往后拖,返回所有记录肯定也会很慢的。 核心问题就在用了to_date函数后,导致不能走索引了。 解决方法是不用函数,或者建立一个函数索引,或者返回部分数据。
Java_Li_peng 2014-11-25
  • 打赏
  • 举报
回复
我现在也遇到了楼主这样的问题,请问最后是怎么解决的,楼主说一下吧。。
ylovep 2014-09-03
  • 打赏
  • 举报
回复
单纯的查询?不需要映射?
ajfajz 2014-09-02
  • 打赏
  • 举报
回复
请问最后是怎么解决的?
suciver 2014-08-07
  • 打赏
  • 举报
回复
楼主这种情况应该是出在mybatis对你这个sql的解析上浪费了太多时间,毕竟你这个sql放到数据库去查很快,而mybatis却很慢,说明不是这个sql的问题而是你写在mybatis xml文件里面的问题。我看楼主这个sql写在xml里用了>=和<=不要这么用。你用 <![CDATA[]]>把你的sql包起来里面直接用<=和>=试试
attilax 2014-08-06
  • 打赏
  • 举报
回复
to_date(#{startTime},'yyyy-MM-DD') 这样的函数根本就使用不到索引..当然慢的拉... 要使用 >= 或者<=的方法才行.... 可以参考 paip.取当天记录的方法sql跟hql hibernate
猿敲月下码 2014-08-05
  • 打赏
  • 举报
回复
尝试不用to_date()函数 把日期参数String改成Date类型试试
致知Fighting 2014-08-04
  • 打赏
  • 举报
回复
返回的结果太多,取数据的时候花的时间太多了吧 在数据库里查出来多少数据?3秒我估计有不少数据了
下一行code 2014-08-01
  • 打赏
  • 举报
回复
引用 7 楼 zxcvbnm11920 的回复:
肯定是哪里搞错,好好检查下,把mybatis里的sql改成select 1 from dual试试,时间差距这么大肯定不是什么效率问题。
其他语句执行都正常,就只有我贴出来的这个语句执行超级慢!!
S117 2014-08-01
  • 打赏
  • 举报
回复
又没有加索引什么的呀,哪那条语句拿出来,加上explain看下执行计划
骑士的崛起 2014-08-01
  • 打赏
  • 举报
回复
肯定是哪里搞错,好好检查下,把mybatis里的sql改成select 1 from dual试试,时间差距这么大肯定不是什么效率问题。
下一行code 2014-08-01
  • 打赏
  • 举报
回复
引用 5 楼 showhunter74 的回复:
直接把sql贴到数据库里直接跑,看看耗时。这160秒不太可能是查询时间
贴到sqldeveloper里跑,不到3秒就出结果了!!!
showhunter74 2014-08-01
  • 打赏
  • 举报
回复
直接把sql贴到数据库里直接跑,看看耗时。这160秒不太可能是查询时间
下一行code 2014-08-01
  • 打赏
  • 举报
回复
引用 3 楼 shixitong 的回复:
不太清楚 http://www.myexception.cn/sql/897236.html 看看这篇文章能不能帮到你
按照你说的改动了下,还是很慢,控制台输出结果: 15:11:03,853 DEBUG Connection:27 - ooo Connection Opened 15:11:03,890 DEBUG PreparedStatement:27 - ==> Executing: SELECT * FROM server_log s WHERE (s.createTime >= to_date('2014-07-02 00:00:00','yyyy-mm-dd hh24:mi:ss') and s.createTime <= to_date('2014-08-01 23:59:59' ,'yyyy-mm-dd hh24:mi:ss')) AND appSerialNumber=0002 ORDER BY createTime 15:11:03,890 DEBUG PreparedStatement:27 - ==> Executing: SELECT * FROM server_log s WHERE (s.createTime >= to_date('2014-07-02 00:00:00','yyyy-mm-dd hh24:mi:ss') and s.createTime <= to_date('2014-08-01 23:59:59' ,'yyyy-mm-dd hh24:mi:ss')) AND appSerialNumber=0002 ORDER BY createTime 15:11:03,891 DEBUG PreparedStatement:27 - ==> Parameters: 15:11:03,891 DEBUG PreparedStatement:27 - ==> Parameters: 15:13:37,193 DEBUG Connection:27 - xxx Connection Closed
shixitong 2014-08-01
  • 打赏
  • 举报
回复
不太清楚 http://www.myexception.cn/sql/897236.html 看看这篇文章能不能帮到你
下一行code 2014-08-01
  • 打赏
  • 举报
回复
引用 1 楼 shixitong 的回复:
确定是程序执行这条sql语句要160多秒,不是其它原因?
确定!因为日志输出是这样的 14:48:12,101 DEBUG PreparedStatement:27 - ==> Executing: SELECT * FROM server_log s WHERE (s.createTime >= to_date(?,'yyyy-MM-DD') and s.createTime <= to_date(? ,'YYYY-MM-DD')) AND appSerialNumber=? ORDER BY ? 14:48:12,101 DEBUG PreparedStatement:27 - ==> Executing: SELECT * FROM server_log s WHERE (s.createTime >= to_date(?,'yyyy-MM-DD') and s.createTime <= to_date(? ,'YYYY-MM-DD')) AND appSerialNumber=? ORDER BY ? 14:48:12,101 DEBUG PreparedStatement:27 - ==> Parameters: 2014-07-02(String), 2014-08-01(String), 0002(String), createTime(String) 14:48:12,101 DEBUG PreparedStatement:27 - ==> Parameters: 2014-07-02(String), 2014-08-01(String), 0002(String), createTime(String) 然后160多秒后出现 14:50:43,439 DEBUG Connection:27 - xxx Connection Closed 用断点也跟过了,就是在session.selectList()这行等了160多秒.......
shixitong 2014-08-01
  • 打赏
  • 举报
回复
确定是程序执行这条sql语句要160多秒,不是其它原因?
内容概要:本文系统介绍了C语言在底层系统编程与数据结构工程化实现中的核心技术,同时融合了现代Web开发中TypeScript类型系统与全栈项目架构设计。C语言部分聚焦操作系统接口调用、内存管理、文件操作与进程控制,深入讲解指针、动态内存分配、结构体与位运算,并通过实现简易shell、日志系统等工具强化实践能力;数据结构部分涵盖链表、栈、队列、哈希表、二叉树与图结构的C语言实现,结合时间与空间复杂度分析,应用于缓存系统、路径搜索等实际场景,并引入内存池优化频繁分配问题。TypeScript部分强调静态类型在提升代码可靠性中的作用,讲解基础类型、泛型、交叉与联合类型、条件类型等,并通过DTO与接口类型保障前后端数据一致性。全栈项目基于React/Vue + Node.js架构,实现RESTful API、JWT认证、统一响应结构,并结合ORM进行数据库操作,完成用户系统、权限管理与任务管理系统等实战项目。同时强调工程化建设,包括代码规范、单元测试、CI/CD及Docker容器化部署。; 适合人群:具备C语言和JavaScript基础,有一定编程经验,希望深入系统编程或向全栈工程师发展的1-3年开发者;; 使用场景及目标:①掌握C语言在系统级开发中的核心应用,如内存管理与系统调用;②实现常用数据结构并应用于工程场景;③构建类型安全的全栈项目,提升前后端协同开发效率;④建立完整的软件工程化能力体系; 阅读建议:学习过程中应结合代码实践,动手实现各类数据结构与系统工具,同步搭建全栈项目,配置工程化工具链,注重理论与实际项目的深度融合。
内容概要:本文介绍了脚本自动化运维在芯片行业中应用于EDA工具链的实战项目,重点解决工具配置、许可证管理与仿真任务调度等效率瓶颈问题。通过构建Bash与Python混合的自动化脚本系统,实现License动态调度、仿真任务并行化、断点续跑及版本兼容性处理,显著提升资源利用率与设计效率。典型案例如License调度脚本通过监控进程活跃度回收闲置许可,结合Flask API实现服务化查询与CI/CD集成,使工程师等待时间从4小时降至15分钟,License利用率提升至89%,并在7nm GPU项目中节约千万级成本。文章还展望了多云调度、AI预测与开源EDA适配等未来方向。; 适合人群:芯片设计工程师、EDA工具运维人员、自动化脚本开发者,以及具备Python/Bash基础的半导体行业技术人员;; 使用场景及目标:①优化高成本EDA许可证的分配与回收,提升资源利用率;②实现大规模仿真任务的自动编排与容错执行;③将自动化脚本嵌入CI/CD流程,支撑高频次验证与签核需求;④降低流片周期与研发成本,加速国产芯片研发进程; 阅读建议:此资源强调工程实践与系统思维的结合,建议读者在掌握基本脚本语法基础上,重点关注异常处理、权限控制、日志审计等生产级设计细节,并尝试将其方案迁移至实际EDA流程中进行调试与优化。

67,536

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧