我有以下两个查询,这些查询基本相同,因为ID列表(主键)是其中一个查询的结果 -
当它似乎应该只是通过子查询中的PK搜索,然后再次搜索外部查询中的PK时,它正在对该查询进行全表扫描似乎很疯狂。
为什么mysql的执行计划会这样做?有没有办法解决它,除了预先获取ID - 即两个查询而不是一个?
答案 0 :(得分:2)
表扫描可能是最快的查找方法,特别是如果整个表都缓存在RAM中(通常就是这种情况)。
当表在内存中,并且索引没有或没有完全时,执行扫描比从硬盘驱动器加载索引更便宜。
尝试更新表格中的统计数据,看看是否得到相同的结果。
ANALYZE TABLE table_name;
你应该发布像mysql版本和表结构这样的东西,以便进一步提供帮助。
答案 1 :(得分:0)
您可以为MySQL指定与FORCE INDEX一起使用的索引。它不是很优雅,但在极少数情况下,这个决定是合理的。