Hello! 欢迎来到小浪云!


添加 ORDER BY 子句为何导致查询速度大幅下降?


avatar
小浪云 2024-11-10 36

添加 ORDER BY 子句为何导致查询速度大幅下降?

添加排序为何导致查询速度大幅下降?

问题描述:

查询rd_pro_inventory_temp表,如果添加ORDER BY t.CREATED_Date DESC子句,查询时间从2秒增加到15秒。然而,单独查询rd_pro_inventory_temp表时,加不加ORDER BY对查询速度影响不大。

原因推测:

索引利用与排序成本:

添加ORDER BY子句后,如果该字段上没有合适的索引,mysql将进行文件排序,即对整个结果集进行物理排序。这比不排序时更费时。

JOIN的影响:

查询涉及rd_pro_inventory_temp表与子查询结果的LEFT JOIN。JOIN操作可能会大幅增加结果集,使得随后的排序操作更复杂和耗时。

索引利用率差异:

单独查询rd_pro_inventory_temp表时,由于数据量小,即便CREATED_Date字段没有索引,排序也能快速完成。然而,一旦加入JOIN和大结果集,无索引排序的成本就会显现。

优化建议:

索引优化:确保rd_pro_inventory_temp表中的CREATED_Date字段有适当的索引。

JOIN与子查询分析: 检查JOIN子查询的输出大小,优化子查询逻辑。如果可能,应减少或优化GROUP_CONCAT函数,以减轻数据处理负载。

查询执行计划分析:使用EXPLaiN工具分析查询执行计划,确认索引是否得到有效使用,以及排序阶段的具体执行情况。基于此,进行有针对性的优化。

相关阅读