按日和/或月份和/或年份选择记录的最有效方法是什么?
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"
注意:也可能存在无论如何搜索日期的情况 无论日期和年份,月份和年份,或月份都是搜索。
答案 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
。
另外,您可以获得日期功能的所有好处,而无需自己编写。