oracle 對于多個大表關(guān)聯(lián)操作如何優(yōu)化速度?
1、首先要建立適當?shù)乃饕ql在索引字段不要加函數(shù),保證索引起效。如果是復合索引注意在sql的順序。如果已經(jīng)存在索 引,建議你先重建索引先,因為大數(shù)據(jù)表的索引維護到了一個階段就是亂的,一般建議重建。建立好的一般可以獲得幾十倍的速度提升。
2、最大數(shù)據(jù)量的表放在最前,最小的表放在最后面。sql是從最后面開始反向解析的。
3、其次是要把最有效縮小范圍的條件放到sql末尾去。尤其是主鍵或者索引字段的條件。
4、保證你sql的算法合理性。保證復雜度和空間度的合理性。
5、必要時候使用存儲過程。提升30%-40%的速度
6、建議你分頁讀取不要一下讀完所有的數(shù)據(jù)。(使用rownum),一下子數(shù)據(jù)太多會使得內(nèi)存不夠用的。
如果這些都做了還不滿意的話,可以考慮建立幾個表空間,然后按照一個算法將各個表的數(shù)據(jù),平均的放在各個表空間內(nèi)(分表分區(qū)),在select的時候數(shù)據(jù)庫就會使用多線程到各個表空間索引數(shù)據(jù),這個一般不是上千萬級的表是不用的。 也不是所有人都會用。
這個得看查詢結(jié)果占到源表的比例:如果占比較大(大于10%-20%),則使用臨時表效果會好。