mysql - 优化分页的 DISTINCT/LIMIT MySQL 查询

标签 mysql optimization pagination group-by limit

我有以下 SQL:

SELECT group_id FROM products WHERE category = 12345 GROUP BY group_id LIMIT 0, 10

或者:

SELECT DISTINCT group_id FROM products WHERE category = 12345 LIMIT 0, 10

LIMIT 用于分页。我想知道如何避免 MySQL 查找所有行,直到它找到我想要的 10 个不同的 group_id。例如,如果我这样做了:

SELECT DISTINCT group_id FROM products WHERE category = 12345 LIMIT 200, 10

它将扫描类别 = 12345 的前 200 行,然后开始收集 10 个不同的 group_id?

更新:如果我在 (group_id, category) 上创建索引会怎样?

最佳答案

您的查询将找到前 200 个不同的行,然后输出接下来的 10 个。DISTINCTLIMIT 之前完成。根据索引和表的存储方式,它可以在满足限制子句后停止收集唯一值。如果您想要的不同值已编入索引,则最有可能出现这种情况。

(顺便说一句,如果您使用 LIMIT 10 OFFSET 200 而不是旧的不直观的 LIMIT 200, 10 表示法,您将提高查询的可读性。)

关于mysql - 优化分页的 DISTINCT/LIMIT MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4998423/

相关文章:

python - 存储用户对数据行的权限

php - 在顶部和其他之后获得特定的 id

java - 为什么 JVM 在繁忙的自旋暂停后显示相同代码块的更多延迟?

Python:CVXPY 解算器错误

php - 如何通过分页从我的 mysql 数据库表中每页只显示 5 条记录?

java - Firestore Android 分页中的 ArrayIndex 错误

jquery - CakePHP 2如何使用同一模型进行多个分页

mysql - SQL:过滤掉列值多次出现的行

javascript - <br/> 不处理来自 mysql 查询的文本

sql - 构建一个个性化的类似 Facebook 的新闻源 : SQL, MongoDB?