首页 > 数据库 >Mybatis 数据库Mysql时间范围内数据查询非常慢的解决办法

Mybatis 数据库Mysql时间范围内数据查询非常慢的解决办法

时间:2023-06-01 17:44:20浏览次数:45  
标签:解决办法 00 Mysql sw 查询 date sql TIME Mybatis

表中数据量过大,目前已有300万条,查询user_name数据速度非常慢,如果不使用索引,想优化sql来提高查询速度,在调试过程中发现,写sql查询数据库时,传入时间段查询部分为:

<!--大于开始时间-->
and sw.TIME >=to_date(CONCAT('2018-09-10', '00:00:00'),'yyyy-mm-dd hh24:mi:ss')
<!--小于结束时间-->
and sw.TIME <=to_date(CONCAT('2018-09-10', '23:59:59'),'yyyy-mm-dd hh24:mi:ss')
在xml中传入String类型的开始时间和结束时间,写为:

<!--大于开始时间-->
and sw.TIME >=to_date(CONCAT(#{start_time}, '00:00:00'),'yyyy-mm-dd hh24:mi:ss')
<!--小于结束时间-->
and sw.TIME <=to_date(CONCAT(#{end_time}, '23:59:59'),'yyyy-mm-dd hh24:mi:ss')
查询后后台打印时间,超过10s;

后来查看数据库,该字段类型为Timestamp类型,在后台传入开始时间和结束时间,将它们先转化为Date类型,再传入sql设置jdbcType=TIMESTAMP:

优化如下:

<select id="findResourcesByRoleIds" resultType="string" parameterType="map" fetchSize="1000">
select user_name from g where
<if test="start_time != null and start_time != '' ">
and
<![CDATA[
sw.TIME >=#{start_time,jdbcType=TIMESTAMP}
]]>
</if>

<if test="end_time != null and end_time != '' ">
and
<![CDATA[
sw.TIME <=#{end_time,jdbcType=TIMESTAMP}
]]>
</if>
</select>
后台打印时间为200ms;

注意点:

1.where条件字段建立索引;

2.使用fetchSize;

3.不要使用to_date函数;



标签:解决办法,00,Mysql,sw,查询,date,sql,TIME,Mybatis
From: https://www.cnblogs.com/lyf906522290/p/17449727.html

相关文章

  • mysql functions ,LAST_INSERT_ID() 或 自定义主键
    http://dev.mysql.com/doc/refman/5.6/en/information-functions.html LAST_INSERT_ID() 这个值如果各个table都有一个自增的id,那么各个table用各自的LAST_INSERT_ID()  自定义:#固定前缀(2位)+时间戳(13位)+随机数(7位)SELECTCONCAT('AB',#......
  • MySQL 8错误日志出现"The table /home/work/mysql_3306/tmp/#sqla2b_298b06_4d is fu
    ##############    了解MySQL8.0.26的错误日志出现"Thetable /home/work/mysql_3306/tmp/#sqla2b_298b06_4disfu11!"的bug,暂时通过修改临时表的存储引擎为内存引擎解决  MySQL8.0.13开始引入新的临时内存表引擎TempTable,并将其作为内存中创建临时表的默认存......
  • MyBatis ${} 和 #{}
    http://www.mybatis.org/mybatis-3/sqlmap-xml.html 下面有一个非官网说明:https://lustforge.com/2014/02/05/mybatis-query-optimization-dollar-sign-be-damned/ ......
  • mysql聚合函数---总体聚合、总体累加、分组聚合、分组累加
    MySQL从版本8.0开始,才支持窗口函数,所以之前的版本分组累加需要构造sql语句来实现。数据:select*fromemp;一、mysql总体聚合函数min()、max()、count()、sum()、avg()selectcount(ename),max(sal),min(sal),sum(sal),round(avg(sal),2)fromemp;二、mysql总体累加/总体累计数量......
  • Linux软件安装--二进制发布包安装、rpm发布包安装(案例:jdk和mysql安装)
    Linux软件安装的4种方式一、二进制发布包指软件已经根据平台编译并且打包,拿到这个包后解压并配置环境变量,如jdk包、mysql包、Tomcat包。示例:二进制发布包安装jdk。示例:二进制发布包安装jdk1.获取安装包1).直接从linux网上下载安装包-->wget https://download.oracle.com/otn-pu......
  • MySql主从复制
    介绍MySQL主从复制是一个异步的复制过程,底层是基于Mysql数据库自带的二进制日志功能。就是一台或多台MySQL数据库(slave,即从库)从另一台MySQL数据库(master,即主库)进行日志的复制,然后再解析日志并应用到自身,最终实现从库的数据和主库的数据保持一致。MySQL主从复制是MySQL数据......
  • Linux centos7 ppc64le编译安装MySQL8遇见问题
    一.关于Nopackagedevtoolset-7-gccavailable.的解决办法1.使用centos默认yum源2.依次执行以下命令yuminstall-ycentos-release-sclyuminstall-ydevtoolset-7 二.cmake3>=3.6.1isneededbymysql-community-8.0.18-1.el7.ppc64le安装cmake3yuminstall......
  • MySQL读写分离
    云数据库RDS版>用户指南>读写分离>验证读写分离效果>通过内部SQL命令验证https://help.aliyun.com/document_detail/54526.html?spm=5176.doc54538.6.698.kpQGbW ......
  • MYSQL知识点汇聚
    MySQL社区版下载地址:http://dev.mysql.com/downloads/第二版MYSQL视频教程:http://php.itcast.cn/news/20130617/17423736508.shtmlMYSQL优化视频教程:http://php.itcast.cn/news/61ee8515/a34e/477d/9d5d/662dbff5e161.shtml 1、MYSQL如何设置大小写敏感写道1、linu......
  • mysql innodb_lock
    SHOWVARIABLESLIKE'%innodb_lock%'    ......