我有一个日期时间列,我必须按日期进行过滤并按日或月进行分组。这是一百万行表。
|IssueDate |
--------------------
|2015-11-24 16:46:00|
这是没有任何索引的首选,因为我总是必须使用日期函数:
select * from myTable where DATE(IssueDate)='2015-11-24'
select * from myTable group by DATE(IssueDate)
select * from myTable group by YEAR(IssueDate), MONTH(IssueDate)
这是第二个选择,用于分隔表中的时间和日期:
|IssueDate |Issuetime|
----------------------
|2015-11-24|16:46:00 |
在这里我可以索引日期字段:
select * from myTable where IssueDate='2015-11-24'
select * from myTable group by IssueDate
select * from myTable group by YEAR(IssueDate), MONTH(IssueDate)
再次尝试冗余盛会:
|IssueDate |Issuetime|IssueMonth|IssueYear|
-------------------------------------------
|2015-11-24|16:46:00 |11 |2015 |
在这里我可以索引我的所有字段:
select * from myTable where IssueDate='2015-11-24'
select * from myTable group by IssueDate
select * from myTable group by IssueYear, IssueMonth
如何为此最佳性能建立索引?
最佳答案
您的部分问题是编写查询,以便它们可以使用索引。
而不是写:
select *
from myTable
where DATE(IssueDate) = '2015-11-24';
尝试:
select *
from myTable
where IssueDate >= '2015-11-24' AND IssueDate < '2015-11-25';
您的其他两个示例使用group by
。我发现MySQL在查询中使用索引进行聚合是相当困难的。
关于Mysql 日期字段索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33898157/