iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >mysql的datetime字段建立索引并比较大小
  • 561
分享到

mysql的datetime字段建立索引并比较大小

mysql数据库sql 2023-08-20 08:08:51 561人浏览 安东尼
摘要

文章目录 1、问题背景2、优化过程1) 操作索引2)是否走索引判断3)datetime使用索引查询 1、问题背景 最近测试库查询一个表的数据,需要用到唯一的一个日期类型字段作为 where 的子查询(查询当天的数据

1、问题背景

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

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

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

2、优化过程

1) 操作索引

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

show index from ${tablename};

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

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

2)是否走索引判断

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

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

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

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';

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

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

来源地址:https://blog.csdn.net/Water_Sky/article/details/126947037

您可能感兴趣的文档:

--结束END--

本文标题: mysql的datetime字段建立索引并比较大小

本文链接: https://www.lsjlt.com/news/376323.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • oracle怎么查询当前用户所有的表
    要查询当前用户拥有的所有表,可以使用以下 sql 命令:select * from user_tables; 如何查询当前用户拥有的所有表 要查询当前用户拥有的所有表,可以使...
    99+
    2024-05-14
    oracle
  • oracle怎么备份表中数据
    oracle 表数据备份的方法包括:导出数据 (exp):将表数据导出到外部文件。导入数据 (imp):将导出文件中的数据导入表中。用户管理的备份 (umr):允许用户控制备份和恢复过程...
    99+
    2024-05-14
    oracle
  • oracle怎么做到数据实时备份
    oracle 实时备份通过持续保持数据库和事务日志的副本来实现数据保护,提供快速恢复。实现机制主要包括归档重做日志和 asm 卷管理系统。它最小化数据丢失、加快恢复时间、消除手动备份任务...
    99+
    2024-05-14
    oracle 数据丢失
  • oracle怎么查询所有的表空间
    要查询 oracle 中的所有表空间,可以使用 sql 语句 "select tablespace_name from dba_tablespaces",其中 dba_tabl...
    99+
    2024-05-14
    oracle
  • oracle怎么创建新用户并赋予权限设置
    答案:要创建 oracle 新用户,请执行以下步骤:以具有 create user 权限的用户身份登录;在 sql*plus 窗口中输入 create user identified ...
    99+
    2024-05-14
    oracle
  • oracle怎么建立新用户
    在 oracle 数据库中创建用户的方法:使用 sql*plus 连接数据库;使用 create user 语法创建新用户;根据用户需要授予权限;注销并重新登录以使更改生效。 如何在 ...
    99+
    2024-05-14
    oracle
  • oracle怎么创建新用户并赋予权限密码
    本教程详细介绍了如何使用 oracle 创建一个新用户并授予其权限:创建新用户并设置密码。授予对特定表的读写权限。授予创建序列的权限。根据需要授予其他权限。 如何使用 Oracle 创...
    99+
    2024-05-14
    oracle
  • oracle怎么查询时间段内的数据记录表
    在 oracle 数据库中查询指定时间段内的数据记录表,可以使用 between 操作符,用于比较日期或时间的范围。语法:select * from table_name wh...
    99+
    2024-05-14
    oracle
  • oracle怎么查看表的分区
    问题:如何查看 oracle 表的分区?步骤:查询数据字典视图 all_tab_partitions,指定表名。结果显示分区名称、上边界值和下边界值。 如何查看 Oracle 表的分区...
    99+
    2024-05-14
    oracle
  • oracle怎么导入dump文件
    要导入 dump 文件,请先停止 oracle 服务,然后使用 impdp 命令。步骤包括:停止 oracle 数据库服务。导航到 oracle 数据泵工具目录。使用 impdp 命令导...
    99+
    2024-05-14
    oracle
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作