是的,我已阅读文档here
我有以下查询:
SELECT * FROM db.table
WHERE event_type = 3
AND (YEAR(event_time) = 2014 AND MONTH(event_time) = 10)
这将返回2014年10月以来的所有记录。很棒。只想问,是否有比写(YEAR(event_time) = 2014 AND MONTH(event_time) = 10)
更短,更好或更简洁的方法?这是传统的"在某一年中提取特定月份的方式?
在这里学习。
答案 0 :(得分:3)
如果您在event_time
列上有索引,则使用YEAR
和MONTH
(或几乎任何函数)将阻止使用索引来完全优化查询。这样的事情会最快;我会留给您确定它是否最新:
SELECT * FROM db.table
WHERE event_type = 3
AND event_time >= '2014-10-01' AND event_time < '2014-11-01'
这将在2014年10月为您提供一切,并且可以完全优化。
答案 1 :(得分:0)
您可以使用2014年记录的with子句创建临时视图,然后从该视图中仅提取10月。
因为每次查询都需要检查是否是2014年和10月。
所以我认为观点会做得更好。
您还可以通过添加索引
来提高性能