zoukankan      html  css  js  c++  java
  • 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.

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

  • 相关阅读:
    精益敏捷企业的七大核心能力和实施路线图-Scrum中文网
    leangoo思维导图实用过程
    Scrum看板+思维导图联动,高效创新
    Leangoo敏捷开发工具- 6.0.2 版发布
    多项目协同管理软件
    项目管理软件~leangoo
    用Leangoo看板工具做采购流程管理
    Android的简单应用(四)——字符串处理
    Android的简单应用(三)——为你的程序添加监听器
    使用WindowManager添加View——悬浮窗口的基本原理
  • 原文地址:https://www.cnblogs.com/nick477931661/p/8616130.html
Copyright © 2011-2022 走看看