mysql 按时间分表_mysql按日期分表应该怎么查询?

数据库设计的是每隔15天分一个表

Like:

log_2014-12-01_2014-12-15

log_2014-12-16_2014-12-31

log_2015-01-01_2015-01-16

log_2015-01-17_2015-02-01

log_2015-02-02_2015-02-17

log_2015-02-18_2015-03-05

log_2015-03-06_2015-03-21

log_2015-03-22_2015-04-06

那么用PHP+mysql查询今天的数据(2015-03-31),怎么获取对应的表?

(我知道首先是应该获取今天的日期,但是不知道怎么通过日期来找对应的表…)

感谢各位,问题已解决。每次创建表的时候,写入一个json文件,包含一个值nowtablename,然后PHP执行的时候读取这个json文件中的nowtablename就行了。

start: 2015-03-31 – (2015-03-31 – 2014-12-01) % 15

你建表的时候有一定规则的吧,比如一个建表的类,里面包含了建表的方法,获取当前日期所在表名的方法。调用这个类的方法就知道了。

首先你分表的规则肯定是有一定规则的,你可以根据你建表的规则来获取Log的区间,看insert插入表的规则,应该就是你查询时的规则了

我觉得可以执行

show tables like 'log_%';

取得第一张表的开始日期,然后在 PHP 里根据它把当前日期对应的表推算出来。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL中,按时间分表的常见做法是使用MySQL的分区功能。通过对分区进行查询,可以快速定位到对应的数据分区,从而实现时间分表查询的效果。 以下是一个按分表的例子: 1. 创建分区 ```sql CREATE TABLE my_table ( id INT NOT NULL, created_at TIMESTAMP NOT NULL ) PARTITION BY RANGE(TO_DAYS(created_at)) ( PARTITION p201901 VALUES LESS THAN (TO_DAYS('2019-02-01')), PARTITION p201902 VALUES LESS THAN (TO_DAYS('2019-03-01')), PARTITION p201903 VALUES LESS THAN (TO_DAYS('2019-04-01')), PARTITION p201904 VALUES LESS THAN (TO_DAYS('2019-05-01')), PARTITION p201905 VALUES LESS THAN (TO_DAYS('2019-06-01')), PARTITION p201906 VALUES LESS THAN (TO_DAYS('2019-07-01')), PARTITION p201907 VALUES LESS THAN (TO_DAYS('2019-08-01')), PARTITION p201908 VALUES LESS THAN (TO_DAYS('2019-09-01')), PARTITION p201909 VALUES LESS THAN (TO_DAYS('2019-10-01')), PARTITION p201910 VALUES LESS THAN (TO_DAYS('2019-11-01')), PARTITION p201911 VALUES LESS THAN (TO_DAYS('2019-12-01')), PARTITION p202001 VALUES LESS THAN (TO_DAYS('2020-01-01')), PARTITION p202002 VALUES LESS THAN (TO_DAYS('2020-02-01')), PARTITION p202003 VALUES LESS THAN (TO_DAYS('2020-03-01')), PARTITION p202004 VALUES LESS THAN (TO_DAYS('2020-04-01')), PARTITION p202005 VALUES LESS THAN (TO_DAYS('2020-05-01')), PARTITION p202006 VALUES LESS THAN (TO_DAYS('2020-06-01')), PARTITION p202007 VALUES LESS THAN (TO_DAYS('2020-07-01')), PARTITION p202008 VALUES LESS THAN (TO_DAYS('2020-08-01')), PARTITION p202009 VALUES LESS THAN (TO_DAYS('2020-09-01')), PARTITION p202010 VALUES LESS THAN (TO_DAYS('2020-10-01')), PARTITION p202011 VALUES LESS THAN (TO_DAYS('2020-11-01')), PARTITION p202012 VALUES LESS THAN (TO_DAYS('2021-01-01')) ); ``` 2. 查询分区 ```sql SELECT * FROM my_table WHERE created_at >= '2019-01-01' AND created_at < '2019-02-01'; ``` 在这个例子中,我们创建了一个名为 `my_table` 的分区中包含了一个 `id` 字段和一个 `created_at` 字段,其中 `created_at` 是一个 `TIMESTAMP` 类型的字段,示数据创建时间。 我们将按照 `created_at` 字段的时间范围进行了分区,每个分区代一个份的数据。例如,`p201901` 分区存储的是 2019 1 份的数据。 当我们需要查询某个时间范围内的数据,只需要指定对应的分区即可,比如上述例子中查询了 2019 1 份的数据。由于查询只需要扫描对应的分区,因此查询速度非常快。 需要注意的是,分区需要在创建就定义好分区结构,因此如果需要对分区结构进行修改,需要重新创建。此外,分区的具体使用方法还会受到 MySQL 版本、存储引擎等因素的影响,需要根据实际情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值