在如何创建高效的排序数据库索引中,我们说到过,高级可以通过有序的优优化索引(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)来进行的,多个查询块可以独立进行此优化。分组排序优化的适用条件如下:
PawSQL针对所有数据库默认开启此优化,
PawSQL专注数据库性能优化的自动化和智能化,支持MySQL,PostgreSQL,Opengauss,Oracle等数据库,提供的SQL优化产品包括
(责任编辑:探索)
雅安市以“三个坚持”推进全市应急预案体系建设 提高实战能力和水平
英国首相称退欧过渡期接近达成一致 英镑兑美元短线拉升逾40点
上交所上半年查处6类违法违规行为 149名董监高信披违规被处分
今年一季度6家险企风险评级不达标 偿付能力充足率保持在高位区间运行
贸易战损人不利己 美国众议院议长敦促特朗普总统停止推进新关税方案