首页 > 解决方案 > 使用 3 个条件和 1 个顺序对大型 MySQL 表执行长查询

问题描述

数据库: MySQL (InnoDB) 版本 14.14 Distrib 5.5.60,用于 debian-linux-gnu (x86_64),使用 readline 6.3

forum_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)

不带 ORDER BY 的查询(3 个条件)

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)

使用 ORDER BY 查询,WHERE 中只有 2 个条件(已删除 + show_homepage)

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)

使用 ORDER BY 查询,WHERE 中只有 2 个条件(已删除 + 已发布)

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)

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

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

请帮助了解问题的原因。

标签: mysql

解决方案


推荐阅读