为时间字段加索引

您所在的位置:网站首页 mysql给列加索引 为时间字段加索引

为时间字段加索引

2024-07-11 16:46| 来源: 网络整理| 查看: 265

为时间字段加索引(待更进)

文章目录 为时间字段加索引(待更进)一、问题1、描述:日期不一致2、原因:时区不同3、解决方法: 时区修改 二、datetime和varchar类型效率比较1、背景2、开始 三、时间字段加索引1、聚集索引2、非聚集索引3、时间字段是否适合加索引 四、参考文档

一、问题 1、描述:日期不一致

在centos7中运行docker,docker中运行mysql,在IDEA中将日期数据写入dates表中

dates表 在这里插入图片描述

插入日期数据

@Test void contextLoads() { Date date = new Date(System.currentTimeMillis()); System.out.println(date); //Tue Mar 24 13:08:49 CST 2020 questionMapper.insertdateTime(date); } mysql中dates数据

在这里插入图片描述

2、原因:时区不同

​ 发现后台输入和数据库中的数据相差了8个小时,因为系统时区和docker中的mysql时区相差8个时区

[root@localhost ~]# docker exec -it mysql01 /bin/bash root@1c202aea2496:/# mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2604 Server version: 5.7.29 MySQL Community Server (GPL) Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show variables like '%time_zone%'; +------------------+--------+ | Variable_name | Value | +------------------+--------+ | system_time_zone | UTC | | time_zone | SYSTEM | +------------------+--------+ 2 rows in set (0.01 sec)

备注:

在连接mysql时记得有"-u"参数,否则会出现Ignoring query to other database错误 3、解决方法: 时区修改 参考这里 mysql> set global time_zone = '+8:00'; Query OK, 0 rows affected (0.00 sec) mysql> show variables like '%time_zone%'; +------------------+--------+ | Variable_name | Value | +------------------+--------+ | system_time_zone | UTC | | time_zone | SYSTEM | +------------------+--------+ 2 rows in set (0.02 sec) 再次插入日期数据 Tue Mar 24 13:32:39 CST 2020 数据查看 在这里插入图片描述 二、datetime和varchar类型效率比较

​ 我记得之前我是通过修改了my.conf文件,进而修改了docker中mysql的日期格式,起效果后,但是下次重启mysql时,启动不容器。打开错误日志后,告诉我my.conf里出现错误,我迫不得已将日期格式改了回来,将datetime改成了varchar类型,来存储时间。

​ 至于如何让docker中的mysql重启的,详见这里

​ 那么datetime和varchar在查找和内存消耗方面有什么区别吗?

​ 以下测试摘录于这里

1、背景

大家都知道数据库表字段设计得是否合理,对查询速度的快慢至关重要,下面做个简单的测试,看下差距有多大

2、开始

1、在数据库中新建两个表 test1(不合理的表) 和 test2(合理表),两张表的 send_time 字段的类型不一样

CREATE TABLE `test1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `send_time` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; CREATE TABLE `test2` ( `id` int(11) NOT NULL AUTO_INCREMENT, `send_time` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

2、新建存储过程,导入10 000 000 条测试数据(运行过程可能需要几分钟),运行结束后再将数据导入表test2保证两张表的数据一致

BEGIN DECLARE i INT DEFAULT 0; START TRANSACTION; WHILE i'2019-03-17' and send_time'2019-03-17' and send_time'2019-03-17' and send_time'2019-03-17' and send_time


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3