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'
毫无悬念,两个基本都是瞬时的.
分享到:
相关推荐
一般应用中,我们用timestamp,datetime,int类型来存储时间格式: int(对应javaBean中的Integer或int) 1. 占用4个字节 2. 建立索引之后,查询速度快 3. 条件范围搜索可以使用使用between 4. 不能使用mysql提供...
FROM_UNIXTIME() 函数可以将 MySQL 中以 INT类型存储的时间(自1970年1月1日0时0分0秒到指定时间所经过的秒数)用一种指定的格式来显示,如未指定格式则默认以年月日时分秒的形式返回。FROM_UNIXTIME(unix_timestamp,...
构建数据库写程序避免不了使用日期和时间,对于数据库来说,有多种日期时间字段可供选择,如 timestamp 和 datetime 以及使用 int 来存储 unix timestamp。 不仅新手,包括一些有经验的程序员还是比较迷茫,究竟我该...
日期和时间类型的存储需求 列类型 存储需求 DATE 3个字节 DATETIME 8个字节 TIMESTAMP 4个字节 TIME 3个字节 YEAR 1个字节 字符串类型的存储需求 列类型 存储需求 CHAR(M) M个字节,0 ...
附:在mysql中,一个时间字段的存储类型是int(11),怎么转化成字符类型,比方存储为13270655222,需要转化为yyyy -mm-dd的形式 使用 FROM_UNIXTIME函数,具体如下: 代码:FROM_UNIXTIME(unix_timestamp,format) ...
mysql创建表 MySQL 创建表是一个基础的数据库操作,它涉及到...• 日期和时间类型:DATE、TIME、DATETIME、TIMESTAMP、YEAR。 • 二进制数据类型:BINARY、VARBINARY、BLOB(包括 TINYBLOB、MEDIUMBLOB、LONGBLOB)。
间类型:尽量使用TIMESTAMP类型,... 您可能感兴趣的文章:详解MySQL查询时区分字符串中字母大小写的方法mysql时区问题有关 PHP 和 MySQL 时区的一点总结MySql查询时间段的方法mysql之TIMESTAMP(时间戳)用法详解mysq
函数:FROM_UNIXTIME作用:将MYSQL中以INT(11)存储的时间以”YYYY-MM-DD”格式来显示。语法:FROM_UNIXTIME(unix_timestamp,format) 返回表示 Unix 时间标记的一个字符串,根据format字符串格式化。format可以包含与...
使用int来存储日期时间,利用FROM_UNIXTIME()【将int类型时间戳转换成日期时间格式】,UNIX_TIMESTAMP()【将日期时间格式转换成int类型】两个函数进行转换 使用bigint来存储IP地址,利用INET_ATON()【将IP格
【mysql中的字符串和时间】 concat(字符1,字符2...) 字符连接 instr(字符串,字符) 寻找字符所在字符串的位置 char ascii编码 转化为字符 ord 字符转化为ascii编码 substring(字符串,开始位置,长度); length...
代码如下:CREATE DEFINER=`root`@`localhost` PROCEDURE `createBusiness`(parameter1 int)BEGIN #Routine body goes here… DECLARE flag int DEFAULT parameter1;#声明变量flag,将参数值赋给该变量 DECLARE ...
今天小编就为大家分享一篇关于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-
{your own query}'配置必需的jdbc2hive.table.name表名表中jdbc2hive.splited.by字段用于jdbc2hive.splited.by为多个映射,现在只支持 int、bigint、timestamp jdbc2hive.jdbc.url jdbc url 配置jdbc2hive.jdbc
说明 类型 默认值 CreatorID 创建者 int 0 CreatedTime 创建时间 Datetime NULL 字段的描述 字段必须填写描述信息(注释) 尽量遵守第三范式的标准(3NF) 表内的每一个值只能被表达一次(列名不重复)表内的每一行...
几段SQL Server语句和存储过程 生成表中的数据的脚本 最详细的SQL注入相关的命令整理 Oracle Oracle中PL/SQL单行函数和组函数详解 mssql+oracle Oracle编程的编码规范及命名规则 Oracle数据库字典介绍 0RACLE的字段...