我们有一个运行良好多年的数据库。但是,现在,我们有一个我不了解的问题。这是mysql / InnoDB配置问题吗?而且我们目前没有人进行系统维护(我是程序员)。
表格TitelDaggegevens的大小只有几Gig,大约有1200万条记录,所以没什么特别的。
如果我们这样做:
SELECT *
FROM TitelDaggegevens
WHERE fondskosten IS NULL
AND (datum BETWEEN 20200401 AND 20200430)
它运行良好,在十分之几秒内。
结果:52条记录。
此外,如果我们添加ORDER BY datum
或通过其他任何非索引字段进行排序:一切正常,速度相同。
但是,如果我添加ORDER BY id
(id是主键),则对于相同的52条记录,查询突然需要15秒。
并且当我ORDER BY
另一个索引字段时,查询时间增加到4-6分钟。用于订购52条记录。在索引字段上。
我有无提示发生了什么。 EXPLAIN对我没有帮助,它对所有查询返回相同的结果。我优化/重新创建了表,检查了表,然后重新启动了服务器。一切都无济于事。我绝对不是配置MySQL或InnoDB的专家,所以我不知道从哪里开始搜索。
我只是希望也许有人认识到这一点,并可以指出正确的方向。
SHOW TABLE STATUS WHERE Name = 'TitelDaggegevens'
给我:
我知道这是一个非常模糊的问题,但是我无法更具体地加以确定。我为慢速查询启用了日志记录,但表slow_log保持为空。我迷路了。
感谢您提出建议,希望在哪里寻找。
这可能对了解它的人有所帮助,但对我来说不是真正的phpmyadmins'Advisor':
看起来像ORDER BY使用3种不同的优化计划
ORDER BY id
-MySQL使用PK解析ORDER BY
ORDER BY datum
或其他非索引字段-MySQL使用文件排序来解析ORDER BY
ORDER BY index_field
-MySQL使用全索引扫描来解决ORDER BY
,它比内存中的文件排序要慢得多这是我的建议。只有EXPLAIN
可以告诉正在发生的事情