oracle大表关联怎样优化
本来看到这个问题不想多说,不过还是写一点,仅供参考。(均为个人见解,可以讨论,不喜勿喷)
首先个人感觉问题问的太泛,这类问题没办法回答。每个sql其实都是独立的,优化的方式也是千差万别,似乎有些一定之规,但是这些一定之规在某些时候也不是那么好用的。还是要根据执行计划一点一点来,判断可能优化的位置和运算过程。
这里我只能说一点点一定之规,不过,先声明,未必管用,因为有时一定之规不一定好用。(一般我们要的是时间,而oracle则要的是cost,这时两个概念,有时cost很小,可是time高,那么你的优化就几乎没有作用了,还有其他的可能,总之不能照搬照抄,还是要根据)
减小大表的数据量(利用子查询将大表变为小表,减小关联判断的数据条数)
尽量用hash连接(一般情况下hash连接臂nested loop好一些,不过有时也会反过来,比如大表关联小表)
看看有没有可以利用的索引或建立表之间的cluster(cluster现在运用的人不多,起码我没见过多少),另外观察下,能不能建立外键一类的,这个也会提高些查询效率的。
最后连接的where条件时,将二者的连接放在第一位(这个其实没有实例说到底能不能优化,不过一般来说都是这样写的),还有什么大表写前,小表写后,我估计这些应该就不用我多嘴了。
对于每次查一部分的表建立相应分区,也能提升些效率的。
不管哪种优化方式,最终都要归到执行计划上来,不能生搬硬套,那样只会越来越慢。
2024-03-16 广告