oracle在多表查詢時,選擇合適的基礎表進行查詢,sql效率會比較高!
所謂基礎表,是指在排在from後面的表列當中,最後乙個位置的表稱為基礎表。
oracle解析器在處理from子句時,會從from後面的最後乙個表開始向前依次連線查詢
如selec t a.name ,b.code,c.content froma a,b b,c c where 。。。時,會先查詢c表,再與b表連線,最後與a表連線查詢。
所以要選擇適當的表作為基礎表,放到from最後乙個位置。
在此處我們假設各表的記錄數大小順序為a
則優化語句不應該像以上sql那樣子寫
最優寫法:
selec t a.name ,b.code,c.content from c c,b b,a a where 。。。
最後要說明一點:對於交叉表查詢,所謂交叉關聯表作為基礎表進行查詢最優。所謂交叉表,舉學生選課為例來說,學生表,課程表,選課情況表,這三張表當中,選課情況表為交叉表,應作為基礎表進行查詢!!
ORACLE SQL效能優化(二)
4.選擇最有效率的表名順序 只在基於規則的優化器中有效 oracle的解析器按照從右到左的順序處理from子句中的表名,因此 from子句中寫在最後的表 基礎表 driving table 將被最先處理.在from子句中包含多個表的情況下,你必須選擇記錄條數最少的表作為基礎表.當oracle處理多個...
ORACLE SQL效能優化系列 二
4.選擇最有效率的表名順序 只在基於規則的優化器中有效 oracle的解析器按照從右到左的順序處理from子句中的表名,因此from子句中寫在最後的表 基礎表 driving table 將被最先處理.在from子句中包含多個表的情況下,你必須選擇記錄條數最少的表作為基礎表.當oracle處理多個表...
ORACLE SQL效能優化系列 二
4.選擇最有效率的表名順序 只在基於規則的優化器中有效 oracle的解析器按照從右到左的順序處理from子句中的表名,因此from子句中寫在最後的表 基礎表 driving table 將被最先處理.在from子句中包含多個表的情況下,你必須選擇記錄條數最少的表作為基礎表.當oracle處理多個表...