我有这个问题:
SELECT *
FROM `content` AS `c`
WHERE c.module = 20
AND c.categoryID
IN ('50', '31', '16', '10')
ORDER BY `c`.`released` DESC
LIMIT 5
Run Code Online (Sandbox Code Playgroud)
......我有两台机器.在LIMIT小于3时,在第一台机器上,EXPLAIN查询返回"使用where"作为额外字段.当LIMIT大于3时,它返回'Using where; 使用filesort'(filesort运行的限制大于3).
在另一台机器上,对于相同的DB和相同的查询,它是不同的:当LIMIT大于60时,运行filesort.
在这两台机器上,my.cnf都一样!
有谁知道如何使用filesort取决于LIMIT以及如何更改此依赖关系?
来自 MySQL LIMIT 优化:
LIMIT row_countwith ORDER BY,MySQL 在找到row_count排序结果的第一行后立即结束排序,而不是对整个结果进行排序。如果通过使用索引来完成排序,则速度非常快。如果必须进行文件排序,则必须选择与不带子句的查询匹配的所有行LIMIT,并且必须对其中大部分或全部进行排序,然后才能确定已row_count找到第一行。无论哪种情况,在找到初始行之后,都不需要对结果集的任何剩余部分进行排序,MySQL 也不会这样做。另外,是否进行文件排序还可能取决于表中的索引(在两种情况下它们是否相同?)、表中的行数(是否相同?)。
关于相同 my.cnf 的一条注释。这可能是相同的,但是两台机器的内存量是否相同?MySQL 可能无法在两者中使用相同数量的内存。
| 归档时间: |
|
| 查看次数: |
843 次 |
| 最近记录: |