<返回更多

高级SQL优化系列之分组排序优化

2023-10-16  微信公众号  PawSQL
加入收藏

高级SQL优化系列之分组排序优化

问题定义

在如何创建高效的数据库索引中,我们说到过,可以通过有序的索引(B+tree)来避免排序操作,从而提升查询的性能。但是如果排序子句或分组子句中的字段来自不同的表,那么数据库优化器就无法利用索引的有序性来避免一次排序操作。

但是如果能从查询中推断出排序字段与另一个表的某个字段具有等值的关系,可以使用此字段来替换原排序字段,从而利用索引的有序性,在进行排序或分组时避免一次排序操作,从而提升SQL查询性能。

譬如对于以下的SQL查询:

select customer.* from customer, orders where c_custkey=o_custkey order by c_name, o_custkey;

排序字段为 C_NAME, o_custkey,来自不同的两个表,但是在查询中条件c_custkey=o_custkey,所以可以用c_custkey来替换o_custkey, 重写后的SQL如下:

select customer.* from customer, orders where c_custkey=o_custkey order by c_name, c_custkey;

适用条件

分组排序优化是针对查询块(Queryblock)来进行的,多个查询块可以独立进行此优化。分组排序优化的适用条件如下:

性能验证

高级SQL优化系列之分组排序优化

高级SQL优化系列之分组排序优化

PawSQL对此优化的支持

PawSQL针对所有数据库默认开启此优化,

高级SQL优化系列之分组排序优化

高级SQL优化系列之分组排序优化

关于PawSQL

PawSQL专注数据库性能优化的自动化和智能化,支持MySQL,PostgreSQL,Opengauss,Oracle等数据库,提供的SQL优化产品包括

关键词:SQL优化      点击(8)
声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多SQL优化相关>>>