Mysql查询时间优化

Posted nick560

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql查询时间优化相关的知识,希望对你有一定的参考价值。

select  count(*) from table where buytime>=‘2011-5-31 00:00:00‘ and buytime<=‘2011-6-6 23:59:59‘ group by itemname

select  count(*) from table where buytime>=unix_stamp(‘2011-5-31 00:00:00‘) and buytime<=unix_stamp(‘2011-6-6 23:59:59‘) group by itemname.

 在mysql中有传统时间函数和Unix时间戳的互换函数。Unix_Timestamp(datetime) 和From_Unixtime(unixtime)

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

之前说过MySQL的时间字段有date,time,datetime,timestamp等,在实际查询时间段时,我们经常将整个字段存储进去,例如像2011-03-10 00:00:00,也有分开存储年,月,日的方式,或者使用right()等字符截取函数来进行查询操作。Anyway,我们都是要对一段时间进行查询。笔者最近在做游戏道具购买方面的查询,按照需要,我们要按照周的方式,查询一周的道具销售量。使用的方式为下面的这种:

select  count(*) from table where buytime>=‘2011-5-31 00:00:00‘ and buytime<=‘2011-6-6 23:59:59‘ group by itemname

这是一种比较传统的方式,需要我们自己指定开始和结束时间,经常使用>,between,<,=来做时间段的规划,但是我们发下这里的buytime不是整型数据,效率比较低,尤其是数据达到百万级之后速度明显会降下来。所以我们采取第二种方法来解决:

Unix时间戳

每个时间都对应了一个唯一的Unix时间戳,时间从1970-1-1 00:00:00开始计时,每过一秒,就加1,在MySQl中有传统时间函数和Unix时间戳的互换函数。Unix_Timestamp(datetime) 和From_Unixtime(unixtime)

mysql> select unix_timestamp(‘2011-8-2 8:50:34‘);
+------------------------------------+
| unix_timestamp(‘2011-8-2 8:50:34‘) |
+------------------------------------+
|                         1312246234 |
+------------------------------------+
1 row in set (0.03 sec)

 

mysql> select from_unixtime(1312246234);
+---------------------------+
| from_unixtime(1312246234) |
+---------------------------+
| 2011-08-02 08:50:34       |
+---------------------------+
1 row in set (0.00 sec)

如此一拉,我们把原来的时间字段,替换成现在unix的整型字段,通过对整数比较,可以大大提高效率,查询时,我们把开始结束时间转换成unix时间戳。

select  count(*) from table where buytime>=unix_stamp(‘2011-5-31 00:00:00‘) and buytime<=unix_stamp(‘2011-6-6 23:59:59‘) group by itemname.

不过这种方式,比较麻烦的就是查询之后需要将时间翻转一次。













以上是关于Mysql查询时间优化的主要内容,如果未能解决你的问题,请参考以下文章

基于查询计划优化 MySQL 查询的建议

php+mysql 如何优化千万级数据模糊查询加快

如何优化mysql查询

mysql 子查询 优化

使用子查询优化 mysql 查询

MySQL查询优化器工作原理解析