如何仅基于月份和年份选择mySQL记录而没有全表扫描

问题描述 投票:0回答:2

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

所以我有类似]的查询>

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

这里创建的是datetime字段,此查询的问题是,如果表中的记录较少,但是当表中的记录增加时,查询将变得非常缓慢,这是正常的

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

帮助我提供使该查询更快地执行的解决方案?

我需要根据月份和年份选择记录,月份和年份将来自PHP,所以我有类似SELECT id的查询,它是从table_name WHERE YEAR(创建)= 2020 AND MONTH(...]创建的。

php mysql sql codeigniter query-optimization
2个回答
0
投票

为了提高性能,您需要索引,并且为了更好地使用索引,应避免在where子句中使用与索引列相关的功能所以你可以尝试添加索引

create index myidx on table_name (created)

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.