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