项目在进行技术压测过程中,遇到很多sql优化的问题,这方面需要了解数据库索引原理,数据库机制,数据库查询优化器,推荐一本书为《Postgresql技术内幕》,开始读很晦涩,但一旦理论联系实际之后,就很好理解。
不过,本人认为,数据库优化第一需要做的是要了解业务需求,在进行优化签,请开发人员先将sql的需求解说一下,然后,在理出业务逻辑,最后将业务场景和sql语句对应来看,进行优化,这样不仅能做到sql优化,还可以做到业务优化。
分享一个书中子查询优化,结合实际业务场景达到优化的效果。
首先,进行理论说明,取自于上述所说书中。
相关子查询:在子查询中引用外层表的列属性,导致外层表每获得一个元组,子查询就需要重新执行一次。
非相关子查询:在次查询语句是独立的,和外层表无直接关系,子查询可以单独执行一次,外层表可重复利用子查询结果。
Postgresql还基于子查询所在的位置和作用不同,将子查询分为子连接(Sublink)和子查询(SubQuery)。
按子句的位置不同,
出现在from关键字后的是子查询,出现在where/on等约束条件中或投影中的子句是子连接。
子查询:
select * from student ,(select * from score)as sc;
子连接:
select * from student where exists (select studentid from