码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 记录-mysql的datetime字段建立索引并比较大小


    文章目录

    • 1、问题背景
    • 2、优化过程
      • 1) 操作索引
      • 2)是否走索引判断
      • 3)datetime使用索引查询

    1、问题背景

    最近测试库查询一个表的数据,需要用到唯一的一个日期类型字段作为 where 的子查询(查询当天的数据),就正常写了个这样的 SQL,具体的表名我就不写了:

    # create_time 是 datetime 类型
    select * from ${tablename} where date(create_time)='20220919' limit 20;
    
    • 1
    • 2

    其中字段的值样本如下:
    在这里插入图片描述
    我知道我写的这条 SQL 即使在 create_time 这个列有索引的情况下也不会走索引,但是执行了以后就 wc 了:
    在这里插入图片描述
    NM!20条记录你查询需要 8 s!
    这种问题要不优化都不敢说自己是农民工!

    2、优化过程

    1) 操作索引

    首先我看了下这个表的索引:

    show index from ${tablename};
    
    • 1

    一看,尼玛,有一个列对应了 2 个索引字段,也就是 create_time 没有索引,我就干掉其中一个重复的并在 create_time 上建了一个(表名我就不写了):

    #删除索引
    drop index index_create_time on ${tablename};
    #添加索引
    create index index_create_time on {tablename}(create_time);
    
    • 1
    • 2
    • 3
    • 4

    2)是否走索引判断

    有索引了关键是得让它走索引啊,先验证一下,我用执行计划继续执行了上面问题背景中的那个sql:

    explain select * from ${tablename} where date(create_time)='20220919' limit 20;
    
    • 1

    结果如下,一点都不意外,照样全表扫描:
    在这里插入图片描述

    3)datetime使用索引查询

    既然不能操作索引列,我又想查询某一天的数据,就只能用范围了,范围的就那个几个,between…and 、> 、<
    于是,我写了下面查询 SQL:

    select * from ${tablename} where create_time between '2022-09-19 00:00:00' and '2022-09-19 23:59:59';
    
    • 1

    果然不辜负我的小操作,查询结果如下:
    在这里插入图片描述
    查询 1850 条数据平均在 0.5 s,这不用说,绝壁走了索引,一个查询 20 条花费 8s,一个小 2 千记录花费半秒,没有可比性。

    下面验证这个查询,同样在 sql 前加上 explain 后执行:
    在这里插入图片描述
    没毛病,索引类型 range,between…and 走的就是这种范围索引,这种范围类型的索引结构开销是有点大的,大到一定程度就不走索引了,比如在性别字段上建索引!

  • 相关阅读:
    【Java系列】Java 简介
    面试~jvm(JVM内存结构、类加载、双亲委派机制、对象分配,了解垃圾回收)
    【三维目标检测】3DSSD(二)
    【JavaScript】JS能力测试题:数组扁平化 | 判断质数 | 获取字符串的长度
    华为程序员,985本科36岁,被公司解约:中年人路在何方?
    linux mysql数据库备份
    Unity 3D 动画系统(Mecanim)|| Unity 3D 人形角色动画(Avatar)
    mksh linux
    嵌入式分享合集115
    There are not enough slots available in the system to satisfy the 48 slots报错
  • 原文地址:https://blog.csdn.net/Water_Sky/article/details/126947037
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号