decode函式相當於case when 但是decode從效率上來講是強於case when的,但是從個人使用的角度來說case when的使用可以更加多樣化,這一點強於decode,兩者的選擇還是從現實中抉擇。
刪除資料的角度來說,可以使用 truncate和delete和drop,從效率來說truncate最快,這是將資料對應的表空間都直接刪除了,delete只是刪除資料,並未刪除表空間,drop雖然也能達到刪除資料的效果,不過將會把表都一起刪除。
刪除語句慎用!!!!!
執行完刪除語句最後刪除或是注釋,否則乙個失誤將會造成嚴重後果!!
如果查詢的兩個表大小差不多,那麼用in和exists差別不大;如果兩個表中乙個較小乙個較大,則子查詢錶比主表大的用exists,子查詢錶比主表小的用in
如果查詢語句使用了not in,那麼對內外表都進行全表掃瞄,沒有用到索引;而not exists的子查詢依然能用到表上的索引。所以無論哪個表大,用not exists都比not in 要快
在oracle中執行sql,總是會先解析sql,會將小寫字母轉換成大寫字母,所以我們寫sql的時候,可以的話都大寫,但是這又會降低可讀性,因為大家一般都是認小寫的英文比較多,這個就看個人情況使用了。
帶有distinct,union,minus,intersect,orderby 的sql語句,會對效率產生很大影響,尤其是distinct需要注意。
及時清理表空間,對無用的臨時表(資料較大)進行及時的清楚
盡可能的避免全表掃瞄,如果一定要的話,根據表資料量的大小,選擇是否在關鍵字段加上索引,這裡的關鍵字段一般選擇在where條件語句中用到的字段和order by排序中用到的字段。
where 語句**現 != 或 <>都會放棄使用索引,直接進行全表掃瞄,慎用!
如果出現or,如有乙個沒有索引,那麼執行的時候都會放棄使用索引,如果條件允許寫成union all
模糊搜尋』%%'也會造成全表掃瞄,這可能是無可避免的
在where語句中如果對欄位進行函式操作,也會使索引失效
索引不可以隨意加,雖然對select效率會提高,但是會對update和insert語句造成影響,所以建索引的時候需慎重。
首先字元型別盡可能的選用可變型別varchar或是nvarchar,這樣會在一定程度上節約資料庫空間
然後如果欄位內只含有數值型別或是浮點數,都不要用字元型別儲存,這樣會造成在查詢時每個乙個欄位的每個字元都會被掃瞄,如果是數值型別就只掃瞄一次。
檢視雖然會在一定程度上降低我們的工作量,節約很多時間,但是檢視的執行也是會消耗資料庫資源的,查詢檢視時,如果資料量較大也會很慢,所以當sql**現了檢視,就小心使用檢視。
查詢時拒絕複雜sql,sql雖沒有程式語言複雜同時也需很高的可讀性,如果不是一定要多重巢狀,那麼我們都會選擇多建臨時表。
盡可能的不要寫select * ,這樣會很消耗資源,還有就是多加條件查詢,會降低查詢時間
多寫注釋,便於二次開發及別人閱讀
Oracle 有關SQL效能優化
訪問 table 的方式 全表掃瞄 全表掃瞄就是順序地訪問表中每條記錄,oracle 採用一次讀入多個資料塊 databaseblock 的方式優化全表掃瞄 通過rowid 訪問表 rowid 包含了表中記錄的物理位置資訊,oracle 採用索引實現了資料和存放資料的物理位置 rowid 之間的聯絡...
oracle的SQL語句效能優化
使用oracle資料庫的應用系統,有時出現sql效能突然變差,特別是對於oltp型別系統執行頻繁的核心sql,如果出現效能問題,通常會影響整個資料庫的效能,進而影響整個系統的正常執行。這是常常遇到的問題,也是一些dba的挑戰。sql效能變差原因分析 sql的效能變差,通常是在sql語句重新進行了解析...
效能優化 SQL優化
1.列型別盡量定義成數值型別,且長度盡可能短,如主鍵和外來鍵,型別字段等等 2.建立單列索引 3.根據需要建立多列聯合索引 當單個列過濾之後還有很多資料,那麼索引的效率將會比較低,即列的區分度較低,那麼如果在多個列上建立索引,那麼多個列的區分度就大多了,將會有顯著的效率提高。4.根據業務場景建立覆蓋...