Pra*_*tav 1 sql oracle optimization join query-optimization
我最近在某处读到了调优SQL查询的方法之一是,如果它有太多的连接,那么用较少的表做一个连接并将结果缓存到临时表中,然后在该表上进行其余的查询连接.
我的问题是它如何改善性能,因为你加入相同数量的表(只是不在一起)?
注意:我同意这是通用声明; 我最近在一篇文章中读到了它.我会改写它.在哪些条件下将结果存储到临时表帮助?
您投资Oracle等产品的原因之一是它们在其引擎的优化器中所做的开发工作.它已经不断改进超过20年,并且通常,通过适当的表和索引统计数据,很难正确地将其用于访问您的数据.
如果我将您的问题解释为每次查询执行时通过构建临时表来提高实时数据查询的性能,我会说在大多数情况下都不会.在其他情况下,不是构建临时表,而是花时间使用Oracle的相对较新的WITH子句来构造查询,该子句将在对优化器有意义的情况下动态处理数据的子集.
如果您的问题是关于在物化视图,数据集市或数据仓库方式中对数据进行非规范化,那么这可以显着提高查询性能,但代价是访问当前信息状态(因为非规范化表总是过时的) .这种改进通常是因为RDBMS引擎对查询的物理访问工作较少,因为您已经完成了一次构建非规范化结构.