如何选择mysql记录只基于月份和年份没有完整的表扫描

k4ymrczo  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(260)

我需要根据月份和年份选择记录,月份和年份将来自php
所以我的问题是

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

这里创建的是datetime字段,这个查询的问题是,如果表中的记录较少,它可以正常工作,但是当表记录增加时,查询变得非常慢
我在2020-05的表中有10000多条记录,总共有100万条记录,因此执行此查询大约需要11秒,我怀疑这是因为查询正在执行完整的表扫描
请帮助我找到一个解决方案,使此查询执行得更快?

htzpubme

htzpubme1#

在where子句中使用函数mysql不使用该列的索引来执行查询时,您在where子句中使用的是year()和month()函数。
您可以将查询更改为下面的,然后再试一次

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

**别忘了给字段添加索引。

相关问题