• 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.

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

  • 相关阅读:
    升级或安装 GNOME Shell
    安装eclipse for c/c++环境
    BT3入门之中文语言支持
    开始接触BT5-自动登录X界面
    标准流与序列化
    IO流
    Collection与Map容器
    常用类
    枚举与常用类
    异常处理机制
  • 原文地址:https://www.cnblogs.com/nick477931661/p/8616130.html
Copyright © 2020-2023  润新知