Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何只根据月份和年份选择mySQL记录,而不进行全表扫描_Php_Mysql_Sql_Codeigniter_Query Optimization - Fatal编程技术网

Php 如何只根据月份和年份选择mySQL记录,而不进行全表扫描

Php 如何只根据月份和年份选择mySQL记录,而不进行全表扫描,php,mysql,sql,codeigniter,query-optimization,Php,Mysql,Sql,Codeigniter,Query Optimization,我需要根据月份和年份选择记录,月份和年份将来自PHP 所以我有这样的疑问 SELECT id, created FROM table_name WHERE YEAR(created) = 2020 AND MONTH(created) = 05 LIMIT 500; 这里创建的是datetime字段,这个查询的问题是,如果表的记录较少,它工作正常,但是当表记录增加时,查询变得非常慢 我在2020-05年的表中有10000多条记录,总共有100万条记录,因此执行此查询大约需要11秒,我怀疑这是因

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

所以我有这样的疑问

SELECT id, created FROM table_name WHERE YEAR(created) = 2020 AND MONTH(created) = 05 LIMIT 500;
这里创建的是datetime字段,这个查询的问题是,如果表的记录较少,它工作正常,但是当表记录增加时,查询变得非常慢

我在2020-05年的表中有10000多条记录,总共有100万条记录,因此执行此查询大约需要11秒,我怀疑这是因为查询正在进行完整的表扫描

请帮助我找到一个解决方案,使此查询执行得更快?

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

您可以将查询更改为下面的内容并进行尝试

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

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

创建的
列是否已被索引?我更喜欢这样的模式:
创建的位置>='2020-05-01'和创建的<'2020-05-01'+间隔1个月
——避免了一些潜在的错误,例如闰年。