`
kabike
  • 浏览: 599382 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

mysql timestamp和int存储时间

阅读更多
show create table 20130107date;

CREATE TABLE `20130107date` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `c_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `c_date_long` int(20) NOT NULL,
  `idx_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `idx_date_long` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `20130107date_idx_date` (`idx_date`),
  KEY `20130107date_idx_long` (`idx_date_long`)
) ENGINE=InnoDB

里面有90w数据,都是随机的时间.
先看没有索引的全表扫描

1 :
select COUNT(*) from 20130107date
where c_date BETWEEN DATE('20110101') and DATE('20110102')

这个需要1.54s

2:
select COUNT(*) from 20130107date
where c_date_long BETWEEN UNIX_TIMESTAMP('20110101') and UNIX_TIMESTAMP('20110102')

这个是2.3s

但是可以这样搞
3 :
select UNIX_TIMESTAMP('20110101') ,UNIX_TIMESTAMP('20110102');

得到结果1293811200和1293897600

然后
select COUNT(*) from 20130107date
where c_date_long BETWEEN 1293811200 and 1293897600;


发现变成了0.61s
1和2的差距还可以说是比较int和比较timestamp的差距,那么2和3的差距呢?难道多出来的时间是每一条记录都要evaluate UNIX_TIMESTAMP('20110102')?

然后用索引
select COUNT(*) from 20130107date
where idx_date_long BETWEEN UNIX_TIMESTAMP('20110101') and UNIX_TIMESTAMP('20110102');

select COUNT(*) from 20130107date
where idx_date BETWEEN '20110101' and '20110102'


毫无悬念,两个基本都是瞬时的.
分享到:
评论

相关推荐

    解析MySQL中存储时间日期类型的选择问题

    一般应用中,我们用timestamp,datetime,int类型来存储时间格式: int(对应javaBean中的Integer或int) 1. 占用4个字节 2. 建立索引之后,查询速度快 3. 条件范围搜索可以使用使用between 4. 不能使用mysql提供...

    MySQL 时间相关查询

    FROM_UNIXTIME() 函数可以将 MySQL 中以 INT类型存储的时间(自1970年1月1日0时0分0秒到指定时间所经过的秒数)用一种指定的格式来显示,如未指定格式则默认以年月日时分秒的形式返回。FROM_UNIXTIME(unix_timestamp,...

    如何选择合适的MySQL日期时间类型来存储你的时间

    构建数据库写程序避免不了使用日期和时间,对于数据库来说,有多种日期时间字段可供选择,如 timestamp 和 datetime 以及使用 int 来存储 unix timestamp。 不仅新手,包括一些有经验的程序员还是比较迷茫,究竟我该...

    MYSQL安装包官方试用版

    日期和时间类型的存储需求 列类型 存储需求 DATE 3个字节 DATETIME 8个字节 TIMESTAMP 4个字节 TIME 3个字节 YEAR 1个字节 字符串类型的存储需求 列类型 存储需求 CHAR(M) M个字节,0 ...

    mysql时间戳转成常用可读时间格式的两种方法

    附:在mysql中,一个时间字段的存储类型是int(11),怎么转化成字符类型,比方存储为13270655222,需要转化为yyyy -mm-dd的形式 使用 FROM_UNIXTIME函数,具体如下: 代码:FROM_UNIXTIME(unix_timestamp,format) ...

    mysql创建表方法.zip

    mysql创建表 MySQL 创建表是一个基础的数据库操作,它涉及到...• 日期和时间类型:DATE、TIME、DATETIME、TIMESTAMP、YEAR。 • 二进制数据类型:BINARY、VARBINARY、BLOB(包括 TINYBLOB、MEDIUMBLOB、LONGBLOB)。

    关于mysql 的时间类型选择

    间类型:尽量使用TIMESTAMP类型,... 您可能感兴趣的文章:详解MySQL查询时区分字符串中字母大小写的方法mysql时区问题有关 PHP 和 MySQL 时区的一点总结MySql查询时间段的方法mysql之TIMESTAMP(时间戳)用法详解mysq

    FROM_UNIXTIME 格式化MYSQL时间戳函数

    函数:FROM_UNIXTIME作用:将MYSQL中以INT(11)存储的时间以”YYYY-MM-DD”格式来显示。语法:FROM_UNIXTIME(unix_timestamp,format) 返回表示 Unix 时间标记的一个字符串,根据format字符串格式化。format可以包含与...

    MYSQL数据库表结构优化方法详解

    使用int来存储日期时间,利用FROM_UNIXTIME()【将int类型时间戳转换成日期时间格式】,UNIX_TIMESTAMP()【将日期时间格式转换成int类型】两个函数进行转换 使用bigint来存储IP地址,利用INET_ATON()【将IP格

    mysql基础只是总结

    【mysql中的字符串和时间】 concat(字符1,字符2...) 字符连接 instr(字符串,字符) 寻找字符所在字符串的位置 char ascii编码 转化为字符 ord 字符转化为ascii编码 substring(字符串,开始位置,长度); length...

    在Mysql存储过程中使用事务实例

    代码如下:CREATE DEFINER=`root`@`localhost` PROCEDURE `createBusiness`(parameter1 int)BEGIN #Routine body goes here… DECLARE flag int DEFAULT parameter1;#声明变量flag,将参数值赋给该变量 DECLARE ...

    MySQL存储时间类型选择的问题讲解

    今天小编就为大家分享一篇关于MySQL存储时间类型选择的问题讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    Mysql存储过程循环内嵌套使用游标示例代码

    BEGIN -- 声明变量 DECLARE v_addtime_begin varchar(13); DECLARE v_addtime_end varchar(13);... SELECT ID from rocky_borrow WHERE BORROWTYPE = 2 AND PUBLISH_TIME >= UNIX_TIMESTAMP('2014-

    jdbc2hive:Hive jdbc 存储处理程序

    {your own query}'配置必需的jdbc2hive.table.name表名表中jdbc2hive.splited.by字段用于jdbc2hive.splited.by为多个映射,现在只支持 int、bigint、timestamp jdbc2hive.jdbc.url jdbc url 配置jdbc2hive.jdbc

    数据库设计命名规范.docx

    说明 类型 默认值 CreatorID 创建者 int 0 CreatedTime 创建时间 Datetime NULL 字段的描述 字段必须填写描述信息(注释) 尽量遵守第三范式的标准(3NF) 表内的每一个值只能被表达一次(列名不重复)表内的每一行...

    asp.net知识库

    几段SQL Server语句和存储过程 生成表中的数据的脚本 最详细的SQL注入相关的命令整理 Oracle Oracle中PL/SQL单行函数和组函数详解 mssql+oracle Oracle编程的编码规范及命名规则 Oracle数据库字典介绍 0RACLE的字段...

Global site tag (gtag.js) - Google Analytics