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

这篇具有很好参考价值的文章主要介绍了mysql的datetime字段建立索引并比较大小。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、问题背景

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

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

其中字段的值样本如下:
mysql的datetime字段建立索引并比较大小
我知道我写的这条 SQL 即使在 create_time 这个列有索引的情况下也不会走索引,但是执行了以后就 wc 了:
mysql的datetime字段建立索引并比较大小
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;

结果如下,一点都不意外,照样全表扫描:
mysql的datetime字段建立索引并比较大小

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

果然不辜负我的小操作,查询结果如下:
mysql的datetime字段建立索引并比较大小
查询 1850 条数据平均在 0.5 s,这不用说,绝壁走了索引,一个查询 20 条花费 8s,一个小 2 千记录花费半秒,没有可比性。

下面验证这个查询,同样在 sql 前加上 explain 后执行:
mysql的datetime字段建立索引并比较大小
没毛病,索引类型 range,between…and 走的就是这种范围索引,这种范围类型的索引结构开销是有点大的,大到一定程度就不走索引了,比如在性别字段上建索引!文章来源地址https://www.toymoban.com/news/detail-401734.html

到了这里,关于mysql的datetime字段建立索引并比较大小的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mysql 索引 区分字符大小写

    mysql 建立索引,特别是unique索引,是跟字符集、字符排序规则有关的。 对于utf8mb4_0900_ai_ci来说,0900代表Unicode 9.0的规范,ai表示accent insensitivity,也就是“不区分音调”,而ci表示case insensitivity,也就是“不区分大小写”。 上述这种数据,如果选了  那么会报错,因为mysql认

    2024年02月12日
    浏览(39)
  • [20230517]建立索引导致的性能问题2.txt

    [20230517]建立索引导致的性能问题2.txt --//生产系统遭遇建立索引导致的性能问题,建立的sql profile里面包含索引名提示,很少见,改索引名导致sql profile失效, --//当然我遇到的情况有一点点不同,建立新索引,然后旧索引设置不可见(相当于改名),具体看下面的测试环境模拟. 1.环境: SC

    2024年02月06日
    浏览(34)
  • mysql 为大表新增字段或索引

    mysql 为大表增加或增加索引等操作时,直接操作原表可能会因为执行超时而导致失败。解决办法如下。 (1) 建新表 -复制表A 的数据结构,不复制数据 (2) 加字段或索引 -表B加上新字段或索引 (3) 导数据到新表 -把原有数据导入新表           未新增字段时      

    2024年01月18日
    浏览(29)
  • MySQL 使用规范 —— 如何建好字段和索引

    一、案例背景 二、库表规范 1. 建表相关规范 2. 字段相关规范 3. 索引相关规范 4. 使用相关规范 三、建表语句 三、语句操作 1. 插入操作 2. 查询操作 四、其他配置 1. 监控活动和性能: 2. 连接数查询和配置 本文的宗旨在于通过简单干净实践的方式教会读者,如何更好地使用

    2024年02月09日
    浏览(28)
  • MySQL版本不同带来Incorrect DATETIME value: ‘‘问题

    业务场景:线上数据同步到本地(开发测试) 版本:线上-5.7    本地-8.0 尝试操作方式: 1、SQL文件 2、备份还原 3、navicat自带传输工具 最终结果:只能备份其中的部分数据,视图同步下来出现  Incorrect DATETIME value: \\\'\\\' 问题 尝试解决方案: 按上述操作之后又会出现新的错误

    2024年02月13日
    浏览(37)
  • 面试官:MySQL表名和字段区分大小写嘛

    唠嗑部分 面试题:MySQL表名和字段区分大小写嘛? 这个问题我们应该这样回答,MySQL列名是不区分大小写的,表名在Windows环境下默认不区分大小写,在Linux环境默认区分大小写,提到默认两个字,那么就说明是可配置的 很多面试题网上都会有标准答案,那么小白为什么会单独

    2024年02月07日
    浏览(30)
  • Mysql,创建/删除表、添加表字段、修改表字段、添加索引等常用语句。

       以下方 user 表为例,讲解如何Mysql创建表语句、添加表字段、修改表字段、添加索引等常用的SQL语句。     出于编写本篇文章的考虑,使用下方建表语句创建的  user表 有很多不合理的地方,例如:teacher_id 是 varchar类型而非 bigint类型、 \\\'创建时间\\\' 有2个字段 等。 大家在自

    2024年02月11日
    浏览(36)
  • spark读取hive表字段,区分大小写问题

    背景 spark任务读取hive表,查询字段为小写,但Hive表字段为大写,无法读取数据 问题错误: 如何解决呢? In version 2.3 and earlier, when reading from a Parquet data source table, Spark always returns null for any column whose column names in Hive metastore schema and Parquet schema are in different letter cases, no matter wh

    2024年01月23日
    浏览(44)
  • 类型转换与索引使用与字段缓存问题

    ** 1: 类型转换与索引使用** 假设你有一个MySQL表格 users ,其中有一个 age 列,数据类型是整数(INT),并且为该列创建了一个索引。然后你执行以下查询: 在这个查询中,你将整数值 \\\'25\\\' 用作字符串来匹配 age 列。MySQL 可能会自动进行类型转换,将字符串转换为整数,然后再

    2024年02月13日
    浏览(30)
  • Golang通过Gorm操作Mysql时遇到的datetime时区问题

    golang使用Gorm操作MySQL,MySQL中数据类型是datetime,Golang中用的是time.now。 但是会导致存储的时间与北京时间有8h误差, 显然是没有初始化时区导致。 参考我自己之前写过的一篇总结——Mysql中多种日期类型——DATETIME、TIMESTAMP、TIME、YEAR、DATE的区分 datetime是给什么就存什么,

    2024年01月20日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包