按天和/或月和/或年检索记录的最有效方法是什么?

时间:2015-09-27 02:35:41

标签: mysql date select innodb

按日和/或月份和/或年份选择记录的最有效方法是什么?

INT(2) day
INT(2) month
INT(4) year

SELECT * FROM table WHERE table.year=2015
SELECT * FROM table WHERE table.month=9 AND table.year=2015
SELECT * FROM table WHERE table.day=26 AND table.month=9 AND table.year=2015

DATE   date

SELECT * FROM table WHERE YEAR(table.date)=2015
SELECT * FROM table WHERE MONTH(table.date)=9 AND YEAR(table.date)=2015
SELECT * FROM table WHERE table.date="2015-09-26"
  

注意:也可能存在无论如何搜索日期的情况   无论日期和年份,月份和年份,或月份都是搜索。

2 个答案:

答案 0 :(得分:1)

更有效的方法是第一种方法。 BUT 你应该使用原生日期格式,这样就排除了第一种方法。

所以,最好的方法是:

select * from table where table.date >= '2015-01-01' and table.date < '2016-01-01';
select * from table where table.date >= '2015-09-01' and table.date < '2015-10-01';
select * from table where table.date >= '2015-09-26' and table.date < '2016-09-27';

如果日期没有时间组件,则最后一个条件可能可以使用=

答案 1 :(得分:1)

第一个可以根据索引或复合材料拖动(注意复数)。很有可能在尝试变得聪明时,它会变慢。复合宽度并不比日期数据类型大小更精简,它使所有内容都以@ 3字节烘焙。

除非您的查询是“每月的第一天,无论年月如何”,

所以,我的表现与#2相同。您需要判断性能不仅仅取决于上面的查询,还要考虑整体性能(想想所需的过多复合材料及其宽度,即使相对精简)对插入/更新的影响。

但即便如此,即使只关注你的查询,3个字节也小于8个(或大多数人可能使用的12个字节)。请注意,我们说的是Date,而不是Datetime

另外,您可以获得日期功能的所有好处,而无需自己编写。