我目前正在开发一个网站邮箱,在数据库中保存大量邮件,可以选择根据日期过滤邮件。我对使用哪种方法以及如何使用感到困惑。
使用TIMESTAMP列并仅基于DATE部分选择记录。考虑到TIMESTAMP是用于执行此操作的数据类型,这似乎更好。但是当过滤时,分裂(到日期和时间)和比较不会更昂贵。如果更好,如何进行比较? (输入:yyyy-mm-dd)
分别使用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),
);
请帮忙......
答案 0 :(得分:4)
我会使用方法1并使用
进行过滤WHERE
your_timestamp >= search_date
AND
your_timestamp < search_date + INTERVAL 1 DAY
假设您的search_date属于DATE类型。 在这种情况下,MySQL可以使用索引。
见this fiddle。 查看执行计划以验证索引的使用。
答案 1 :(得分:0)
我建议您首先按日期排序保存表中的记录。这样做,您不需要比较每个值,但您可以使用二进制搜索来查找具有所需日期的记录的两个边界(开始和结束)。 我也会用时间戳。如果您存储的是时间戳而不是文本,则它将是数字,并且在进行比较时非常快。