Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.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
使用3个条件和1个顺序对大型MySQL表执行长时间查询_Mysql - Fatal编程技术网

使用3个条件和1个顺序对大型MySQL表执行长时间查询

使用3个条件和1个顺序对大型MySQL表执行长时间查询,mysql,Mysql,数据库:MySQL(InnoDB)版本14.14发行版5.5.60,适用于使用readline 6.3的debian linux gnu(x86_64) forum\u posts表大小:300万行 主查询(3个条件+1个订单): SELECT * FROM forum_posts WHERE deleted = 0 AND published = 1 AND show_homepage = 1 ORDER BY id DESC LIMIT 5 OFFSET 25; 5 rows in set

数据库:MySQL(InnoDB)版本14.14发行版5.5.60,适用于使用readline 6.3的debian linux gnu(x86_64)

forum\u posts表大小:300万行

主查询(3个条件+1个订单):

SELECT * FROM forum_posts WHERE deleted = 0 AND published = 1 AND 
show_homepage = 1 ORDER BY id DESC LIMIT 5 OFFSET 25;
5 rows in set (12.56 sec)
不按订单查询(3个条件)

在WHERE(已删除+显示主页)中使用ORDER BY和仅2个条件进行查询

在其中(已删除+已发布)使用ORDER BY和仅2个条件进行查询

为什么主查询运行时间约为12秒? 表中所有4个字段都有索引(3个字段来自条件,1个字段来自订单)

此外,我还为3个字段和所有4个字段创建了计算索引。 没什么帮助


请帮助理解问题的原因。

可能是因为这是第一个查询,下一个查询只是从缓存中提取数据。您需要对我的朋友进行冷测试。数据库缓存在这里帮助您。更好的是,检查您的解释计划。在后续查询的性能得到回答后,尝试您的查询。对于原始查询;仅仅因为您有索引并不意味着它们对于您的查询是最佳的,或者您的数据库正在生成使用它们的最佳计划。尝试添加多列索引(顺序可能很重要)或使用强制索引测试改进。如前所述,检查执行计划是确定性能损失发生在何处的唯一真正方法。
SELECT * FROM forum_posts WHERE deleted = 0 AND published = 1 AND 
show_homepage = 1 LIMIT 5 OFFSET 25;
5 rows in set (0.01 sec)
SELECT * FROM forum_posts WHERE deleted = 0 AND show_homepage = 1 ORDER 
BY id DESC LIMIT 5 OFFSET 25;
5 rows in set (0.01 sec)
SELECT * FROM forum_posts WHERE deleted = 0 AND published = 1 ORDER BY 
id DESC LIMIT 5 OFFSET 25;
5 rows in set (0.01 sec)