日期字段的Mysql索引

时间:2015-11-24 15:53:08

标签: mysql performance date indexing

我有一个日期时间列,我必须按日期过滤并按天或月分组。这是一个百万行表。

|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

最佳效果索引此内容的方式是什么?

1 个答案:

答案 0 :(得分:1)

您的部分问题是编写查询,以便他们可以使用索引。

而不是写作:

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在查询中使用索引进行聚合非常困难。