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