我有一个表,在其中插入年份、月份、一年中的周数和一年中的日数以及每个记录。
我使用这些字段来过滤记录而不是完整日期,因为我有数百万条记录,我希望通过比较整数而不是日期来提高性能。
我能够根据日期和年份选择日期之间的记录。如果年份相同,则查询工作正常,但一旦更改年份,查询就不会工作,因为我正在使用AND。
桌子看起来像这样:
身份证件




完整日期
这是工作查询

SELECT COUNT(id) AS records_count
FROM table1
WHERE table1.day >= 176
AND table1.day <= 275
AND table1.year <= 2015
AND table1.year >= 2015

这是我需要调整的问题
SELECT COUNT(id) AS records_count
FROM table1
WHERE table1.day >= 275
AND table1.day <= 176
AND table1.year <= 2014
AND table1.year >= 2015

最佳答案

你储存日期的方法完全不适合你想做的事。一般形式为:

where (year = 2014 and day >= 275 or year > 2014) and
      (year = 2015 and day <= 176 or year < 2015)

这将适用于任何一对年份,而不仅仅是相隔一年的年份。
现在,如果您正常存储日期,那么您只需执行以下操作:
where date >= makedate(2014, 275) and date <= makedate(2015, 176)

这个结构真正非常好的地方在于MySQL可以在date上使用索引。这在你的查询中是不可能的。
一般来说,在关系数据库中,使用整数而不是其他数据类型之类的微观优化是不值得的。通常,读取数据的成本比在一行内处理要贵得多。事实上,这个例子就是一个很好的例子。既然可以完全使用索引消除对比较的需求,为什么还要尝试提高比较的速度呢?

关于mysql - MySQL选择一年中的某天和一年之间的记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32933497/

10-15 18:41