【正文】
5:設(shè)法減少表掃描次數(shù)6:盡量使用簡單sql來代替PLSQL邏輯7:避免不必要的排序 1:確認order by 是否多余 2:union是否可以被union all替代 3:不可避免排序,要降低開銷,降序索引8:使用pls_integer類型 變量時整數(shù)型可使用。內(nèi)部算法改進可提高性能。9:避免數(shù)據(jù)類型轉(zhuǎn)換,隱式類型轉(zhuǎn)換 1:在insert和update語句中,oracle將賦值的類型轉(zhuǎn)換為目標列的類型。sysdate根據(jù)參數(shù)NLS_DATE_FORMAT和NLS_DATE_LANGUAGE轉(zhuǎn)換為字符 2:SELECT中,oracle會將查詢到的數(shù)據(jù)類型自動轉(zhuǎn)換為目標變量的類型。 3:對數(shù)值類型的操作,oracle經(jīng)常調(diào)整其精度precision和刻度scale,允許最大容量。 4:當(dāng)比較字符和數(shù)值的時候,數(shù)值有更高的優(yōu)先級,講字符轉(zhuǎn)化為數(shù)值進行比較。5:字符類型(可轉(zhuǎn)換成數(shù)值),number類型與浮點數(shù)類型轉(zhuǎn)換,可能會丟失精度,數(shù)值和number以十進制表示數(shù)字,浮點數(shù)以二進制表示。6:講clob轉(zhuǎn)換為字符類型(varchar2),獲獎blob轉(zhuǎn)換成raw類型的時候,被轉(zhuǎn)換的類型長度長的話,會出錯。7:binary_float自動轉(zhuǎn)換為binary_double是準確的,反之不準確。binary_doublebinary_floatnumber8:字符串與date類型比較,date具有較高優(yōu)先級,將字符串轉(zhuǎn)化為date類型,需要上下文的支持。9:當(dāng)使用sql函數(shù)或操作符時候,傳入類型和實際接收的類型不一致,會將傳入的類型根據(jù)需要轉(zhuǎn)化為一致。10:賦值運算=的時候,oracle會將右邊被賦值的類型轉(zhuǎn)化為何左邊類型一致的類型。11:在做連接操作的時候,oracle會將非字符類型轉(zhuǎn)化為字符類型,根據(jù)上下文轉(zhuǎn)換。12:在字符和非字符之間的算術(shù)和比較運算中,oracle會將字符轉(zhuǎn)換成日期,rowid、數(shù)值類性,算術(shù)操作轉(zhuǎn)化為數(shù)值,rowid比較的將字符轉(zhuǎn)化為rowid,日期比較的轉(zhuǎn)化為日期類型。13:字符類型將的類型轉(zhuǎn)換,char,varchar,nchar,nvaechar2,nchar和nvarchar2需要國家字符集utf8和al16utf16的支持,按字符存儲的。char,varchar2手數(shù)據(jù)庫默認字符機支持 14:sql字符函數(shù)可以接受clob類型,substr,instr,對不接受clob類型的自動轉(zhuǎn)換為字符類型 15:空格10:if的順序,入?yún)⒃绞穷l繁調(diào)用的值,對應(yīng)的if邏輯越需要靠前,條件靠前可以減少判斷的次數(shù)。11:設(shè)計開發(fā)對列是否為空慎重決定,null會影響oracle的執(zhí)行計劃。索引能回答問題時,非空索引能用上全索引掃描提高性能??账饕龝?dǎo)致count(*)記錄出錯 索引列不可能為空,不要加is not null的check Not in查詢中,空值會限制unnest轉(zhuǎn)換,導(dǎo)致優(yōu)化器無法選擇anti算法,走抵消的filter Oracle 如果是not exists或exists和類似group by子句連用,cbo不做查詢轉(zhuǎn)換,會慢,改成not in或in12:不要對列運算Select * from a where trunk(log_time)=to_date(‘20130901’,’yyyymmdd’)。