如何在不全表扫描的情况下仅基于月份和年份选择 mySQL 记录



我需要根据月份和年份选择记录,月份和年份将来自PHP

所以我有这样的查询

SELECT id, created FROM table_name WHERE YEAR(created) = 2020 AND MONTH(created) = 05 LIMIT 500;

这里创建的是日期时间字段,此查询的问题是,如果表的记录较少,则它工作正常,但是当表记录增加时,查询变得非常慢

我在 10,000-2020 年的表中有超过 2020 条记录,总共有 100 万条记录,因此执行此查询大约需要 11 秒,我怀疑这是因为查询正在进行全表扫描

帮助我提供解决方案以使此查询执行得更快?

当您在 where 子句中使用函数时,您在 where 子句中使用 YEAR(( 和 MONTH(( 函数 MySQL 不使用该列的索引来执行查询。

您可以将查询更改为下面并尝试

SELECT id, created FROM table_name WHERE created between '2020-05-01 00:00:00' and '2020-05-31 23:59:59'

** 不要忘记为您的字段添加索引。

最新更新