Mysql 日期字段索引

标签 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

如何为此最佳性能建立索引?

最佳答案

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

而不是写:

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/

相关文章:

mysql - 如何在同一个表中的MySQL中更新具有多个条目的单列

Python to_datetime(来自 3 列中的 int/float)

mysql - 重复向表的字段添加值

mysql - SQL查询以获取具有某些条件的最后一组不同记录

php - 如何在 MySQL 上为我的搜索创建一个动态选择列

JavaScript 从时间戳获取日期和时间

php - 如何从当前日期计算最后四个星期日的日期

javascript - 当 Jquery 的 close() 找不到元素时,我的应用程序会变慢,我该如何执行相同的查询但速度更快?

c++ - 在将 char 数组复制到字符串期间节省 CPU 周期(提高性能)

java - OpenGL绘制数千个二维圆