选择在特定日期输入的所有记录 - MySQL

时间:2014-08-15 15:36:29

标签: mysql sql date

我目前正在开发一个网站邮箱,在数据库中保存大量邮件,可以选择根据日期过滤邮件。我对使用哪种方法以及如何使用感到困惑。

方法1:

使用TIMESTAMP列并仅基于DATE部分选择记录。考虑到TIMESTAMP是用于执行此操作的数据类型,这似乎更好。但是当过滤时,分裂(到日期和时间)和比较不会更昂贵。如果更好,如何进行比较? (输入:yyyy-mm-dd)

方法2:

分别使用TIME和DATE的列。然后将日期字段值与过滤器参数进行比较(格式为:yyyy-mm-dd)。插入新记录(邮件)似乎很昂贵,每次只发生一个。但过滤需要比较大量记录。所以,似乎更直接。 同样在方法二中,我在将默认值设置为CURRENT_DATE和CURRENT_TIME时遇到问题!

这是表创建代码:

CREATE TABLE mailbox (
    Mid INT NOT NULL AUTO_INCREMENT,
    FromId INT NOT NULL,
    ToId INT NOT NULL,
    Subject VARCHAR(256) DEFAULT 'No Subject',
    Message VARCHAR(2048) DEFAULT 'Empty Mail',
    SDate DATE DEFAULT CURRENT_DATE,
    STime TIME DEFAULT CURRENT_TIME,
    PRIMARY KEY (Mid),
    );

请帮忙......

2 个答案:

答案 0 :(得分:4)

我会使用方法1并使用

进行过滤
WHERE 
     your_timestamp >= search_date 
AND 
     your_timestamp < search_date + INTERVAL 1 DAY

假设您的search_date属于DATE类型。 在这种情况下,MySQL可以使用索引。

this fiddle。 查看执行计划以验证索引的使用。

答案 1 :(得分:0)

我建议您首先按日期排序保存表中的记录。这样做,您不需要比较每个值,但您可以使用二进制搜索来查找具有所需日期的记录的两个边界(开始和结束)。 我也会用时间戳。如果您存储的是时间戳而不是文本,则它将是数字,并且在进行比较时非常快。