首页 > 数据库 >关于DATE_SUB的sql查询执行慢的优化

关于DATE_SUB的sql查询执行慢的优化

时间:2023-10-08 14:45:09浏览次数:40  
标签:SUB CREATE sql TIME DATE type ORDER

背景:

       因为订单表是分表的,需要每天定时从不同订单表里获取7天前到当前时间的数据。归档到一个表中进行统计分析之类的计算。因为每张表数据量比较大(千万级的数据),ORDER_CREATE_TIME 是创建了索引的。ORDER_CREATE_TIME 的 type 是 datetime 类型,通过 ORDER_CREATE_TIME >= DATE_SUB(SYSDATE(),INTERVAL 7 DAY) 作为条件。大家都知道 DATE_SUB 函数,这里就不做特别的解释。

 

        

 

问题:

       使用条件 WHERE ORDER_CREATE_TIME >= DATE_SUB(SYSDATE(),INTERVAL 7 DAY)   运行起来贴别慢,差不多一个小时才能跑完数据。

分析:

      使用 EXPLAIN  执行计划分析一下。以下是一部分测试数据执行。

1、通过执行计划看看使用  WHERE ORDER_CREATE_TIME >= DATE_SUB(SYSDATE(),INTERVAL 7 DAY)  的情况。

      

    发现是 type 是 index    (  type扫描方式由快到慢     system > const > eq_ref > ref > range > index > all  )

    index类型,需要扫描索引上的全部数据,它仅比全表扫描快一点

2、通过执行计划  直接将条件修改为时间:WHERE ORDER_CREATE_TIME >= '2023-08-17 00:00:00'

   

      type 是 ref

 经测试,原来需要跑一个小时的数据,改为第2种后 不到一分钟数据就跑完了。

总结: sql 中使用函数了,虽然走了索引,但全表扫描了。

所以大家如果用到类似的条件,可以考虑传参数。而不用函数。

 

 

 

 

 

 

 

  

标签:SUB,CREATE,sql,TIME,DATE,type,ORDER
From: https://www.cnblogs.com/m5n7xiao/p/17648886.html

相关文章

  • 直播平台源码,FlinkSQL实现行转列
    直播平台源码,FlinkSQL实现行转列1、使用UNNEST解析 select name,course,scorefromods_kafka_student_scores CROSSJOINUNNEST(`list`)ASt(course,score);select name,course,scorefromods_kafka_student_scores,UNNEST(`list`)ASt(course,score);select name......
  • js 时间戳 随机数 new Date().getTime()
    一:时间转时间戳:javascript获得时间戳的方法有四种,都是通过实例化时间对象 newDate()来进一步获取当前的时间戳1.vartimestamp1=Date.parse(newDate());//结果:1477808630000不推荐这种办法,毫秒级别的数值被转化为000 console.log(timestamp1);2.vartimestamp2=(n......
  • mysqldump 导出来的文件,使用 source还原时报错“ASCII '\0' appeared in the stateme
    导出语句:mysqldump-uroot-pword--databasesdb1--tablestable1>./sqldumps/archive-table1-`date+"%Y%m%d_%H%M%S"`.sql导出后,使用source还原报错:ASCII'\0'appearedinthestatement,butthisisnotallowedunlessoption我开始以为是我导出的编码格式有问题,......
  • mysql中limit后面不能使用运算符
    mysql中limit后面不能使用运算符进行分页查询的时候,如果写成以下sql,语句执行会报错:select*fromuserwhereid=123456andcode=111andcreate_date>=20190101andcreate_date<=20190202limit(1-1)*1,20因为mysql中limit后面不能带运算符,只能是常量。解决方法使......
  • MYSQL中 find_in_set() 函数用法详解(匹配部门id或父id为100的数据)
    https://blog.csdn.net/carefree31441/article/details/119563685   ......
  • Centos系统安装MySQL数据库时,要以不安全的方式连接至 dev.mysql.com,使用“--no-check-
    解决:要以不安全的方式连接至dev.mysql.com,使用“--no-check-certificate” 问题:[root@192桌面]#wgethttps://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm--2023-10-0812:44:16--https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.......
  • Centos系统安装MySQL详细教程
    首先再虚拟机中安装一个Centos7(VM虚拟机安装Centos7)CentOS是常见的Linux操作系统之一,它是一款开源的,稳定而且高效的操作系统。作为一名开发人员,我们经常需要在CentOS系统上安装MySQL数据库。本文将为您介绍如何在CentOS系统上成功安装MySQL数据库的详细步骤。一、安装MySQL数......
  • MySQL学习(4)好好使用B+树索引
    前言每个索引都是一颗B+树,对于聚簇索引,每一条完整记录都存储在B+树都叶子节点上;对于其他索引,叶子节点存储了索引列和主键。这么做都是为了提升查询速度,那么在实际使用中,是不是应该给所有列都添加索引呢,索引该如何使用呢?先见一张表,随机添加一些数据:CREATETABLEsingle_table(......
  • cmd输入mysql不是内部或外部指
    如果在cmd中输入mysql后出现“mysql不是内部或外部指令”,那么可能是以下几个问题导致的。1.没有正确安装MySQL第一步,到MySQL官网下载安装程序;第二步,在安装程序中选择完全安装,确保包括MySQL的bin目录(默认路径为C:\ProgramFiles\MySQL\MySQLServer5.7\bin)被加......
  • mysql 如何实现 like in?
    https://blog.csdn.net/qq_36800514/article/details/115380100--阅读权限全239部分9select*fromhljtxeip_institutionwherestate=1anddeleteState=0andpermissionType=1 SELECT *FROM hljtxeip_institutionasa JOIN( SELECT substring_index(substr......