对于在条件中的IN列表过长导致执行缓慢,有如下几种优化方案:
1. 通过explain查看执行计划,如果由于IN列表过长导致没有选用range的索引扫描方式,而是用了ALL的全表扫描,则可以通过调大range_optimizer_max_mem_size 参数来解决,具体大小和in列表中元素个数相关,建议逐步调大后通过explain来验证,直至可以选择全表扫描
2. 如果是PolarDB 8.0.2 版本,可以通过设置 in_predicate_conversion_threshold 参数,该参数表示如果IN列表中元素个数超过参数设定的阈值,PolarDB将改IN条件转为join来执行,该方法可能获得更优的执行效率
3. 如果是PolarDB 8.0.1 或 8.0.2版本,可以通过开启并行查询来加速执行,并行查询的介绍和开发方法请参考
弹性并行查询。
4. 通过force index hint强制指定目标range索引来执行,关于force index hint的使用方法详见
MySQL官方文档。