MySQL中字段用int时间戳还是用timestamp?因为查询时该字段上有比较多的范围查询? 5C

在created_at列加索引的前提下。
表数据量千万级别。
explain显示扫描行数是二百万的级别
select count(*) from users where created_at<'2018-08-28 00:00:00' and created_at>='2018-08-01 00:00:00'
count大概是四五十万级的别。这种范围查询 created_at用int时间戳和timestamp性能上哪种会比较好

0

5个回答

建议你用timestamp就行了,如果你需要利用timestamp进行范围查询,可以在该列添加索引。

至于性能上哪种会比较好,我没有试过,以下是我推测给的建议:因为实际上mysql内部存储日期实际上就是整数,仅仅是表现形式不太一样,timestamp更易读,所以,我不认为这二者性能会有多大差距。如果可以,你可以造几十万条数据来测试一下我的猜测。测试时注意查询缓存的影响。

https://www.roncoo.com/course/list.html?courseName=mysql

0

个人建议不要用timesstamp,timesstamp占用存储大,不同数据库版本不兼容,数据库移植比较麻烦。timestamp还会存在时区问题,如果数据库所在机器
的时区设置不正确,会导致你的日期不准确,这个很麻烦。
最通用的还是存储毫秒数或者日期字符串,至于用整型的毫秒数还是日期字符串就看你怎么方便了,毫秒数所用字节数少一点,就是查询的时候要将标准的日期字符串转成毫秒再查,稍微麻烦点,还有就是不直观。所以一般用日期字符串存比较通用

0

个人建议采用int 这样操作起来非常方便,添加索引,并且保证你写的sql 所以会生效,就ok了

0

个人建议毫秒计数,建议long类型,

0

如果单纯考虑新能,差异不会太明显,int与时间戳的本质都是数值。
不过从数据库设计来说,应该考虑的是timestamp还是datetime
1. 如果要利用自动初始化和更新的特性,必须选timestamp
2.如果需要与时区相关,必须选timestamp
3.如果普通业务的日期,选择datetime

至于int存储时间戳,除非需要直接存储和获取unix时间戳(例如嵌入式系统通讯和同步),没必要考虑。举个例子,常常应用于嵌入式系统的sqlite数据库,
其时间戳天然的是int的unix时间戳。

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
MYSQL数据库时间字段INT,TIMESTAMP,DATETIME性能效率比较
正 文:    在数据库设计的时候,我们经常会需要设计时间字段,在MYSQL中,时间字段可以使用int、timestamp、datetime三种类型来存储,那么这三种类型哪一种用来存储时间性能比较高,效率好呢?飘易就这个问题,来一个实践出真知吧。 MYSQL版本号:5.5.19 建立表: CREATE TABLE IF N
mysql中timestamp,datetime,int类型的区别与优劣
转载请注明来自souldak,微博:@evagle 以下内容整合筛选自互联网: int 1. 占用4个字节 2. 建立索引之后,查询速度快 3. 条件范围搜索可以使用使用between 4. 不能使用mysql提供的时间函数 结论:适合需要进行大量时间范围查询的数据表 datetime 1. 占用8个字节 2. 允许为空值,可以自定义值,系统不会自动修改其值。 3
sqlite timestamp 时间字段查询语句的写法
在sqlite里对timestamp字段进行where语句查询时,请首先确定存储的时间格式是否是ISO 8601标准的时间字符串,也就是2011-04-10T15:45:58,或者是* 2011-04-10T 14:25:10.487如果你的timestamp字段写入的是2011-04-11 15:45:58,可以肯定告诉你,你再怎么按时间查询都是有很大问题,明明表里有就是查不出来,所以写入新纪录
Mysql时间字段格式如何选择,TIMESTAMP,DATETIME,INT?
      Mysql时间字段格式如何选择,TIMESTAMP,DATETIME,INT?          首先 DATETIM和TIMESTAMP类型所占的存储空间不同,前者8个字节,后者4个字节,这样造成的后果是两者能表示的时间范围不同。前者范围为1000-01-01 00:00:00 ~ 9999-12-31 23:59:59,后者范围为1970-01-01 08:00:01到203...
根据年月日查询mysql的时间戳(timestamp)的处理方法
有的时候我们想查询数据的创建时间,也可以理解为用户的注册时间来查询数据,因为一般创建时间都会timestamp类型,所以根据年月日的日期是无法查询到的,所以我们需要转换格式查询,下面就看具体的操作吧。这是我表的数据。这是我的查询语句。完全查询不到的。下面我们就要根据时间戳来转换格式查询。可以看到使用格式转换之后就能匹配到查询的数据格式了。版权声明:觉得此文有用的,请您点个赞,如果有自己想法,可以在...
数据库中timestamp,datetime,int时间类型区别
mysql中timestamp,datetime,int类型区别   int 1. 占用4个字节 2. 建立索引之后,查询速度快 3. 条件范围搜索可以使用使用between 4. 不能使用mysql提供的时间函数 结论:适合需要进行大量时间范围查询的数据表   datetime 1. 占用8个字节 2. 允许为空值,可以自定义值,系统不会自动修改其值。 3. 实际格式储存
Laravel Eloquent ORM字段及时间处理
class User extends Model { #以下属性和方法都不是必须的,但是一般都要按需求定义一些 //定义关联的表名,不定义的话默认此模型关联的表为 模型名s (users) protected $table = 'user'; /******字段相关*******/ #定义主键字段名,默认是id protec...
mysql查询当天日期(时间字段是时间戳)
from_unixtime(time_stamp) -&amp;gt; 将时间戳转换为日期 unix_timestamp(date) -&amp;gt; 将指定的日期或者日期字符串转换为时间戳   时间戳1540880327转换时间2018/10/30 14:18:47 如果要查询当天的订单的记录: [plain]  select count(*) from b_order Where ...
mybatis 查询时间戳类型(TIMESTAMP) 回显成时间字符串的问题
直接在数据苦中插入的时候.时间戳类型数据的转换 INSERT INTO  tab(shijian) VALUES(FROM_UNIXTIME(1499409740)); SELECT FROM_UNIXTIME(1499409740)       mybatis在select查询TIMESTAMP类型的时间时,如果resultType=&quot;java.util.HashMap&quot;,返回的ma...
细说MySQL的时间戳(Timestamp)类型
转载生产环境中部署着各种版本的MySQL,包括MySQL 5.5/5.6/5.7三个大版本和N个小版本,由于MySQL在向上兼容性较差,导致相同SQL在不同版本上表现各异,下面从几个方面来详细介绍时间戳数据类型。 时间戳数据存取  在MySQL上述三个大版本中,默认时间戳(Timestamp)类型的取值范围为'1970-01-01 00:00:01' UTC 至'2038-01-19 03:14:...
oracle运用(一) oracle数据库使用 TIMESTAMP()类型查询数据
1.刚开始,使用PLSQL Developer执行如下SQL语句: select billsell.CREATE_TIME from BILL_SELL billsell WHERE billsell.STATUS <> 9 AND billsell.ACTIVE_FLAG = 0 AND billsell.STATUS = 2 AND billsell.CREATE_T
Hibernate关于查询Timestamp字段总结
之前在Mysql中做条件查询遇到点问题,经过科普以后,总结对Timestamp使用遇到的问题,希望对大家有帮助。 1. 如何查询某一天的数据? 解决的办法有很多种,我说一种我的做法,算是比较简单的:我们知道在Mysql中Timestamp字段的格式为yyyy-MM-dd HH-mm-ss 当你需要查询某天的时候,肯定是要去掉字段的时分秒的,Mysql提供了一些函数帮助我们格式化这些字段。这里就不
mysql之TIMESTAMP(时间戳)用法详解(转载)
此文章为转载 TIMESTAMP时间戳在创建的时候可以有多重不同的特性, 如: 1.在创建新记录和修改现有记录的时候都对这个数据列刷新: 1 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 2.在创建新记录的时候把这个字段设
mysql int,datetime,timestamp时间戳、时间日期相关总结分析
int 1. 占用4个字节,注意int型的数值范围(参考下文timestamp,对于1970之前的日期可以存负数后,使用DATE_ADD进行后续处理) 2. 建立索引之后,查询速度快 3. 条件范围搜索可以使用使用between 4. 不能使用mysql提供的时间函数 5.无数据自带校验,使用php自带函数(strtotime)转换成时间日期格式, 6.可读性较差,每次阅读都必须使用da
mysql通过时间戳查找出指定时间区间内的记录
       今天弄一个要查找一周内记录条数的功能,首先要构造一个sql,我数据库里面记录时间用的是时间戳(create_time字段),网上找了很多,大多不是条件不符合就是函数不对,要不就是传的参数错误,最后总结一下还是自己来吧,这里用到3个函数。CURDATE( )  返回今天日期,并格式化,结果是 2018-3-15FROM_UNIXTIME( )传入时间戳,返回格式化日期TO_DAYS(‘...
phoenix对于时间的查询
select TO_CHAR(trx_date, 'yyyy-MM-dd HH:mm:ss') from POSTEST limit 1;
Mysql查询当日信息(字段是时间戳格式)
废话不说,直接看代码吧: SELECT uname, FROM_UNIXTIME( datex, '%Y-%m-%d' ) FROM `datex` WHERE FROM_UNIXTIME( datex, '%Y%m%d' ) =20120711
mysql查询统计当天,本周,本月数据(time字段为时间戳格式)
PHP技术交流QQ群:490910618        $day_start = date('Y-m-d', time());        $week_start = date('Y-m-d', strtotime('last day this week'));        $month_start = date('Y-m-01', time());        $end = date('Y...
mysql在sql语句中将时间戳格式化
date为需要处理的参数(该参数是Unix 时间戳),可以是字段名,也可以直接是Unix 时间戳字符串  后面的 '%Y%m%d' 主要是将返回值格式化  例如:  mysql>SELECT FROM_UNIXTIME( 1249488000, '%Y%m%d' )   ->20071120  mysql>SELECT FROM_UNIXTIME( 1249488000, '%Y年%m月
如何使用MYSQL时间戳查询时间段
使用MYSQL时间戳查询时间段的常用函数UNIX_TIMESTAMP(date)如果没有参数调用,返回一个Unix时间戳记(从’1970-01-01 00:00:00′GMT开始的秒数)。如果UNIX_TIMESTAMP()用一个date参数被调用,它返回从’1970-01-01
mysql int存储2038-01-19之后时间戳的问题
文章目录场景分析解决 场景 项目中将账号的截至时间戳以int类型存储在mysql中, 测试同学在测试的时候 提出了一个bug 在2038-01-19之后日期会被截取成2038-01-19 分析 mysql int 有符号位 支持的最大长度是 2147483647; 而2038-01-19 11:14:07(北京时间) 已经达到了最大存储值, 所以之后的时间会被截取 解决 更新类型 bi...
mysql根据时间戳查询数据
比如我们要查询每天的注册用户数量,这里我们的注册时间是时间戳的话。我们写的sql语句就得把时间转换为日期进行查询。sql语句如下: 函数:FROM_UNIXTIME"select count(*) user_regnumber,FROM_UNIXTIME('reg_time',"%Y-%m-%d") as group_date from users where status=1 group by
mysql的模糊查询以及时间类型整理
mysql的一些基本用法
mysql数据库字段类型timestamp随当前时间戳更新
当mysql字段类型设是timestamp时 [code=&quot;java&quot;]CREATE TABLE `test` (`test_time` timestamp NOT NULL COMMENT '时间::YYYYMMDDhhmmss');[/code] 执行SQL建表,查看表设计,该字段会自动勾选根据当前时间戳更新 此时需要使用alert语句给字段赋默认值: [code=&quot;java&quot;]AL...
db2按时间戳或日期条件查询
我一同事写的.记录一下 substr(char(timestamp),1,10) = #date# timestamp是表中timestamp字段 #date#是条件值 select * from table where substr(char(timestamp),1,10) = #date# 时间戳查询 ===========补充 日期类型查询 select
MySQL查询时间戳
from_unixtime()是MySQL里的时间函数  date为需要处理的参数(该参数是Unix 时间戳),可以是字段名,也可以直接是Unix 时间戳字符串  后面的 '%Y%m%d' 主要是将返回值格式化  例如:  mysql>SELECT FROM_UNIXTIME( 1249488000, '%Y%m%d' )   ->20071120  mysql>SEL
在mybatis中做oracle 时间戳TIMESTAMP类型字段的比较
如果传过来的参数是日期类型则与数据库日期的格式对应即可;如果传过来的参数是字符串类型,则须做类型转换。 代码如下: [code=&quot;java&quot;] AND CRAETE_TIME = TO_TIMESTAMP(#{createTime,jdbcType=TIMESTAMP}, 'YYYY-MM-DD HH24:MI:SS:FF6') [/code]...
mysql查询varchar类型,传Int参数时的一点看法
也是很偶然间遇到的一个问题.在进行mysql查询时,传的参数类型要求为varchar,然后传了个int类型的0,结果竟然...查出来了数据... 再经过一些测试数据之后,也是明白了,查询时的问题所在.下面是一个示例. 首先是准备测试数据 然后查询userid = 0的时候,会去匹配开头不为数字    和     开头数字为0,00,000等,后面跟着的不为数字的数据. 然后查询参数...
MySQL 时间戳(TIMESTAMP)用法
1、在插入记录和更新记录时都将时间戳对应的字段更新为当前时间 TIMESTAMP DEFAULT CURRENT TIMESTAMP ON UPDATE CURRENT TIMESTAMP 2、仅在创建时设置为当前时间 TIMESTAMP DEFAULT CURRENT TIMESTAMP 3、仅在更新时设置为当前时间 TIMESTAMP ON UPDATE CURRENT TIM...
Hive时间戳TIMESTAMP使用的限制
在Hive中提供了字段类型TIMESTAMP,但其对应的时间格式为yyyy-MM-dd HH:MM:SS,即通过LOAD命令将文本加载到已创建的表中时,只有满足上述格式的内容才可以被正确解析,否则只能识别为NULL。1.        创建表。create table airline ( Yyear double, Tt double, W double, R double, L do...
数据库字段选取--时间戳
时间戳
mysql根据时间戳查询指定日期内数据
MySql查询时间段的方法未必人人都会,下面为您介绍两种MySql查询时间段的方法,供您参考,希望对您能有所启迪。 MySql的时间字段有date、time、datetime、timestamp等,往往我们在存储数据的时候将整个时间存在一个字段中,采用datetime类型;也可能采用将日期和时间分离,即一个字段存储date,一个字段存储时间time。无论怎么存储,在实际应用中,很可能会出现包
MySQL时间戳TIMESTAMP的用法
MySQL时间戳的用法一、TIMESTAMP的变体TIMESTAMP时间戳在创建的时候可以有多重不同的特性,如:1.在创建新记录和修改现有记录的时候都对这个数据列刷新:?1TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP2.在创建新记录的时候把这个字段设置为当前时间,但以后修改时,不再刷新它:?1TIMESTAMP DE...
HIbernate 的时间戳比较
原文[url]http://hi.baidu.com/mwm2007/blog/item/068271668924b226ab184cd0.html[/url] hibernate很大的一个特点就是屏蔽了数据库的差异,使用了hibernate就应该尽量HQL来操作数据库(除非不得不用数据库本身的一些特性),而对于时间类型的比较hibernate也是支持的。HQL: and a...
记录:java执行mysql语句查询字段类型:timestamp返回页面显示会多出个 .0,自己如何处理的
记录下自己编程中的一些小问题,对于这个问题为什么查询出来显示的数据与数据库原数据不一样,还没弄明白,请教下,知道私信留言评论,谢谢!
mysql timestamp和long存储时间效率比较
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_da
mysql建表时多个字段用到timestamp时报错怎么办
Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause 原因是当你给一个timestamp设置为on updatecurrent_timestamp的时候,其他的timestamp字段需要显式设定default值
nodejs 使用Sequelize操作MySQL,timestamp时间不对问题
这两天我将工程中的mysql SQL语句改用Sequelize进行序列化操作,遇上了时间不一致的问题,特此记录下,希望对大家也能有帮助。 我的数据库中每张表都有自己定义的一个timestamp字段,取得是current_time,系统当前时间,数据插入后会自动生成此字段的值; 我使用sequelize的自动生成表models工具 sequelize-auto自动生成models,其中读times...
PHP Mysql两组时间戳、日期转换函数
写过PHP+MySQL的程序员都知道有时间差,UNIX时间戳和格式化日期是我们常打交道的两个时间表示形式,Unix时间戳存储、处理方便,但是不直观,格式化日期直观,但是处理起来不如Unix时间戳那么自如,所以有的时候需要互相转换,下面给出互相转换的几种转换方式。  一、在MySQL中完成      这种方式在MySQL查询语句中转换,优点是不占用PHP解析器的解析时间,速度快,缺点是只能
MYSQL之查询Timestamp某个日期的数据
实战SQL语句 @Query(value = &amp;amp;quot; select * from event e &amp;amp;quot; + &amp;amp;quot; where (e.event_title like CONCAT('%',?1,'%') or ?1 is null) &amp;amp;quot; + &amp;amp;quot; and (to_days(e.register_time)=to_days(?2)
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java类中班级的字段 数据库用课程设计