我不建议在没有充分理由的情况下使用STRAIGHT_JOIN。我自己的经验是,MySQL查询优化器选择不良的查询计划的频率比我想要的要多,但不足以使您通常绕开它,如果您始终使用STRAIGHT_JOIN,这就是您要做的。
我的建议是将所有查询保留为常规联接。如果发现一个查询正在使用次优查询计划,建议您先尝试重写或重新组织查询,以查看优化程序是否会选择更好的查询计划。另外,至少对于innodb,请确保不仅仅是索引统计信息已过期(ANALYZE
TABLE)。这可能会导致优化器选择不良的查询计划。优化器提示通常应该是您的最后选择。
不使用查询提示的另一个原因是,随着表的增长,您的数据分布可能会随时间变化,或者索引选择性可能会发生变化等。您的查询提示现在是最佳的,随着时间的流逝可能会变得不理想。但是由于您现在已经过时的提示,优化器将无法适应查询计划。如果允许优化器做出决策,则可以保持更大的灵活性。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)