數(shù)據(jù)庫(kù)操作手冊(cè)樣本_第1頁(yè)
數(shù)據(jù)庫(kù)操作手冊(cè)樣本_第2頁(yè)
數(shù)據(jù)庫(kù)操作手冊(cè)樣本_第3頁(yè)
數(shù)據(jù)庫(kù)操作手冊(cè)樣本_第4頁(yè)
數(shù)據(jù)庫(kù)操作手冊(cè)樣本_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

ORACLE數(shù)據(jù)庫(kù)操作手冊(cè)2.0中華人民共和國(guó)通信集團(tuán)公司安徽有限公司計(jì)費(fèi)業(yè)務(wù)部2007年11月修改記錄版本日期編輯者編輯內(nèi)容1.0/見(jiàn)春蕾形成草稿1.1/8/31見(jiàn)春蕾依照實(shí)際狀況修訂某些章節(jié)2.0/11/05見(jiàn)春蕾一、在第一章(數(shù)據(jù)庫(kù)使用注意事項(xiàng))中增長(zhǎng)了關(guān)于批量更新數(shù)據(jù)大事務(wù)分次提交規(guī)定、客戶端配備辦法、修改密碼辦法;二、在第二章(SQL編寫注意事項(xiàng))中增長(zhǎng)了關(guān)于提示(Hints)使用。三、增長(zhǎng)了第四章(跟蹤SQL執(zhí)行籌劃),闡述了有關(guān)理論知識(shí)和SQL執(zhí)行籌劃跟蹤辦法。目錄ORACLE數(shù)據(jù)庫(kù)操作手冊(cè)2.0 1第一章數(shù)據(jù)庫(kù)使用注意事項(xiàng) 5二、不使用數(shù)據(jù)庫(kù)時(shí)請(qǐng)及時(shí)關(guān)閉數(shù)據(jù)庫(kù)連接,但是也不能頻繁連接和斷開(kāi) 5三、執(zhí)行了DML操作,請(qǐng)按業(yè)務(wù)規(guī)則,不要忘掉執(zhí)行COMMIT或ROLLBACK。 5四、如果是查詢和記錄不涉及到當(dāng)天業(yè)務(wù)時(shí),不要在生產(chǎn)環(huán)境里操作,在BCV庫(kù)中操作。BCV每天晚上12點(diǎn)同步一次,數(shù)據(jù)和顧客口令、密碼和生產(chǎn)環(huán)境相似。 5五、關(guān)聯(lián)表都很大查詢和記錄也盡量用BCV庫(kù)。 6六、生產(chǎn)環(huán)境營(yíng)業(yè)時(shí)間(特別是營(yíng)業(yè)高峰時(shí)間,當(dāng)前是上午8:00-10:00,下午3:00-4:00)禁止做大數(shù)據(jù)量查詢和記錄,每個(gè)查詢執(zhí)行時(shí)間要控制在1分鐘內(nèi)。 6七、不要執(zhí)行索引和表信息收集。 6八、編寫程序時(shí)候,注意SQL語(yǔ)句規(guī)范,盡量使用變量綁定,減少共享池使用。 6九、按照原則規(guī)定編寫pl/sql等程序,注意事務(wù)提交、回滾和對(duì)各種異常狀況解決。 6十、要查看表字段名或隨機(jī)少量數(shù)據(jù)時(shí)候,使用desc、也可以使用where1=2或者rowcount<n來(lái)查看,而盡量不要直接執(zhí)行select*fromtablename,然后kill會(huì)話。 6十一、盡量使用索引,避免浮現(xiàn)全表掃描,性能影響比單機(jī)更大。 6十二、對(duì)分區(qū)表建立索引時(shí),使用local選項(xiàng)。 6十三、不要在事務(wù)中引入Trigger,建議在事務(wù)中實(shí)現(xiàn)。 6十四、批量更新數(shù)據(jù)大事務(wù)分次提交。 6十五、客戶端配備。 7十六、修改密碼。 7第二章SQL編寫注意事項(xiàng) 9一、SELECT子句中避免使用* 9二、查找總記錄數(shù)時(shí),盡量不要用count(*),而要指定一種有索引字段。 9三、將大歷史表創(chuàng)立為分區(qū)表,便于數(shù)據(jù)轉(zhuǎn)儲(chǔ)和刪除。 9四、使用分區(qū)表進(jìn)行查詢時(shí),盡量把分區(qū)鍵作為查詢條件第一種條件。 9五、Sequence采用cache/noorder,如果在使用sequence上列建索引,建議加大cache值。 9六、在FROM子句中包括各種表狀況下,選取記錄條數(shù)至少表作為基本表,放在FROM子句最背面。 9七、WHERE子句中連接順序 10八、在需要無(wú)條件刪除表中數(shù)據(jù)時(shí),用truncate代替delete。 11九、語(yǔ)句中盡量使用表索引字段,避免做大表全表掃描。 11十、帶通配符(%)like語(yǔ)句 11十一、用EXISTS代替IN 11十二、用NOTEXISTS代替NOTIN 12十三、盡量用UNION-ALL替代UNION 12十四、Orderby語(yǔ)句建議 13十五、避免使用NOT 13十六、使用DECODE函數(shù)來(lái)減少解決時(shí)間 14十七、刪除重復(fù)記錄 14十八、如果可以使用where條件,盡量不要在having中限制數(shù)據(jù) 14十九、盡量不要使數(shù)據(jù)排序 14二十、使用提示(Hints) 15第三章oracle和sybaseSQL區(qū)別 15一、大小寫 15二、限制記錄數(shù)量 15三、列選取 16四、連接 16五、字符串函數(shù) 16六、日期函數(shù) 16七、數(shù)據(jù)類型轉(zhuǎn)換函數(shù): 17八、空值代替函數(shù): 17九、sybasewhere語(yǔ)句執(zhí)行[]正則符號(hào),但是oracle9i不支持。 17十、數(shù)字取舍 17第四章跟蹤SQL執(zhí)行籌劃 18一、理論 18(一)ORACLE優(yōu)化器 18(二)訪問(wèn)TABLE方式 18(三)索引訪問(wèn)方式 19二、SETTRACE跟蹤sql執(zhí)行籌劃 19第一章數(shù)據(jù)庫(kù)使用注意事項(xiàng)一、對(duì)BOSS1.5營(yíng)帳庫(kù),營(yíng)業(yè)網(wǎng)址嚴(yán)格按照規(guī)定進(jìn)行配備,不可隨意更換。營(yíng)業(yè)網(wǎng)址規(guī)定按照下面方式進(jìn)行分派配備,如果隨意更換,會(huì)增長(zhǎng)營(yíng)業(yè)主機(jī)間數(shù)據(jù)交互,影響數(shù)據(jù)庫(kù)性能,減少營(yíng)業(yè)工作效率。合肥、六安、阜陽(yáng)、宿州、亳州、淮北、黃山、銅陵配備::7001/WebRoot/login.jsp或者蕪湖、蚌埠、淮南、馬鞍山、安慶、滁州、宣城、巢湖、池州,配備如下::8001/WebRoot/login.jsp或者二、不使用數(shù)據(jù)庫(kù)時(shí)請(qǐng)及時(shí)關(guān)閉數(shù)據(jù)庫(kù)連接,但是也不能頻繁連接和斷開(kāi)數(shù)據(jù)庫(kù)連接也是數(shù)據(jù)庫(kù)寶貴資源,數(shù)據(jù)庫(kù)支持?jǐn)?shù)據(jù)庫(kù)連接有限,當(dāng)不需要使用數(shù)據(jù)庫(kù)時(shí),請(qǐng)“優(yōu)雅”退出數(shù)據(jù)庫(kù)吧,如果能正常退出,請(qǐng)別“結(jié)束任務(wù)”或KILL-9。如果正在執(zhí)行SQL時(shí)候突然異常終端,請(qǐng)聯(lián)系數(shù)據(jù)庫(kù)管理員檢查解決,以防止數(shù)據(jù)庫(kù)始終占用該SQL有關(guān)資源。三、執(zhí)行了DML操作,請(qǐng)按業(yè)務(wù)規(guī)則,不要忘掉執(zhí)行COMMIT或ROLLBACK。不要只執(zhí)行語(yǔ)句,而不控制事務(wù)。當(dāng)你執(zhí)行一條DML語(yǔ)句時(shí),數(shù)據(jù)庫(kù)會(huì)為你分派鎖、回滾段、REDOLOGBUFFER等資源。事務(wù)結(jié)束后,這些資源才干得以釋放。四、如果是查詢和記錄不涉及到當(dāng)天業(yè)務(wù)時(shí),不要在生產(chǎn)環(huán)境里操作,在BCV庫(kù)中操作。BCV每天晚上12點(diǎn)同步一次,數(shù)據(jù)和顧客口令、密碼和生產(chǎn)環(huán)境相似。bcv是一種節(jié)點(diǎn)數(shù)據(jù)庫(kù),所有地市查詢連接配備是同一種,如下:YZDBBCV=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=5)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=yzdb)))五、關(guān)聯(lián)表都很大查詢和記錄也盡量用BCV庫(kù)。六、生產(chǎn)環(huán)境營(yíng)業(yè)時(shí)間(特別是營(yíng)業(yè)高峰時(shí)間,當(dāng)前是上午8:00-10:00,下午3:00-4:00)禁止做大數(shù)據(jù)量查詢和記錄,每個(gè)查詢執(zhí)行時(shí)間要控制在1分鐘內(nèi)。七、不要執(zhí)行索引和表信息收集。八、編寫程序時(shí)候,注意SQL語(yǔ)句規(guī)范,盡量使用變量綁定,減少共享池使用。九、按照原則規(guī)定編寫pl/sql等程序,注意事務(wù)提交、回滾和對(duì)各種異常狀況解決。十、要查看表字段名或隨機(jī)少量數(shù)據(jù)時(shí)候,使用desc、也可以使用where1=2或者rowcount<n來(lái)查看,而盡量不要直接執(zhí)行select*fromtablename,然后kill會(huì)話。十一、盡量使用索引,避免浮現(xiàn)全表掃描,性能影響比單機(jī)更大。十二、對(duì)分區(qū)表建立索引時(shí),使用local選項(xiàng)。十三、不要在事務(wù)中引入Trigger,建議在事務(wù)中實(shí)現(xiàn)。十四、批量更新數(shù)據(jù)大事務(wù)分次提交。在營(yíng)帳數(shù)據(jù)庫(kù)系統(tǒng)繁忙時(shí)候,不不大于300萬(wàn)數(shù)據(jù)刷新,建議分次提交,減少異常發(fā)生。系統(tǒng)空閑時(shí),不不大于800萬(wàn)數(shù)據(jù)刷新,建議分次提交。十五、客戶端配備。辦法一、直接修改tnsnames.oraYZDBBCV=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=5)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=yzdb)))辦法二、使用客戶端工具十六、修改密碼。用sql*plus使用賬號(hào)連接數(shù)據(jù)庫(kù)可以從菜單進(jìn)入也可以從命令行窗口進(jìn)入辦法一、使用password命令辦法二、使用alter命令A(yù)lteruser賬號(hào)identifiedby密碼密碼規(guī)則問(wèn)題:有字符、數(shù)字、特殊字符要六位以上和此前密碼不能有三個(gè)以上相似字符第二章SQL編寫注意事項(xiàng)一、SELECT子句中避免使用*在SELECT子句中列出所有列時(shí),使用*很以便,但是效率低。由于ORACLE在解析過(guò)程中,會(huì)查詢數(shù)據(jù)字典,將*依次轉(zhuǎn)換成所有列名。因此,直接在SELECT子句中寫出想要顯示列。二、查找總記錄數(shù)時(shí),盡量不要用count(*),而要指定一種有索引字段。例如索引列為index,使用count(index),這樣能運(yùn)用索引。三、將大歷史表創(chuàng)立為分區(qū)表,便于數(shù)據(jù)轉(zhuǎn)儲(chǔ)和刪除。四、使用分區(qū)表進(jìn)行查詢時(shí),盡量把分區(qū)鍵作為查詢條件第一種條件。五、Sequence采用cache/noorder,如果在使用sequence上列建索引,建議加大cache值。六、在FROM子句中包括各種表狀況下,選取記錄條數(shù)至少表作為基本表,放在FROM子句最背面。由于在基于規(guī)則優(yōu)化器中,ORACLE解析器按照從右到左順序解決FROM子句中表名。FROM子句中寫在最后表將被最先解決。例如:表TAB116,384條記錄表TAB25條記錄選取TAB2作為基本表(最佳辦法)selectcount(*)fromtab1,tab2...執(zhí)行時(shí)間0.96秒選取TAB1作為基本表(不佳辦法)selectcount(*)fromtab2,tab1...執(zhí)行時(shí)間26.09秒如果有3個(gè)以上表連接查詢,那就需要選取交叉表作為基本表,交叉表是指那個(gè)被其她表所引用表例如:EMP表描述了LOCATION表和CATEGORY表交集SELECT*FROMLOCATIONL,CATEGORYC,EMPEWHEREE.EMP_NOBETWEEN1000ANDANDE.CAT_NO=C.CAT_NOANDE.LOCN=L.LOCN將比下列SQL更有效率SELECT*FROMEMPE,LOCATIONL,CATEGORYCWHEREE.CAT_NO=C.CAT_NOANDE.LOCN=L.LOCNANDE.EMP_NOBETWEEN1000AND七、WHERE子句中連接順序ORACLE采用自下而上順序解析WHERE子句。依照這個(gè)原理,表之間連接必要寫在其她WHERE條件之前,那些可以過(guò)濾掉最大數(shù)量記錄條件必要寫在WHERE子句末尾。例如:(低效,執(zhí)行時(shí)間156.3秒)SELECT*FROMEMPEWHERESAL>50000ANDJOB='MANAGER'AND25<(SELECTCOUNT(*)FROMEMPWHEREMGR=E.EMPNO);(高效,執(zhí)行時(shí)間10.6秒)SELECT*FROMEMPEWHERE25<(SELECTCOUNT(*)FROMEMPWHEREMGR=E.EMPNO)ANDSAL>50000ANDJOB='MANAGER';八、在需要無(wú)條件刪除表中數(shù)據(jù)時(shí),用truncate代替delete。九、語(yǔ)句中盡量使用表索引字段,避免做大表全表掃描。例如Where子句中有聯(lián)接列,雖然最后聯(lián)接值為一種靜態(tài)值,也不會(huì)使用索引。select*fromemployeewherefirst_name||''||last_name='BeillCliton';這條語(yǔ)句沒(méi)有使用基于last_name創(chuàng)立索引。當(dāng)采用下面這種SQL語(yǔ)句編寫,Oracle系統(tǒng)就可以采用基于last_name創(chuàng)立索引。Select*fromemployeewherefirst_name='Beill'andlast_name='Cliton';十、帶通配符(%)like語(yǔ)句

例如SQL語(yǔ)句:

select*fromemployeewherelast_namelike'%cliton%';

由于通配符(%)在搜尋詞首浮現(xiàn),因此Oracle系統(tǒng)不使用last_name索引。通配符如此使用會(huì)減少查詢速度。當(dāng)通配符出當(dāng)前字符串其她位置時(shí),優(yōu)化器就能運(yùn)用索引。在下面查詢中索引得到了使用:

select*fromemployeewherelast_namelike'c%';十一、用EXISTS代替IN在許多基于基本表查詢中,為了滿足一種條件,往往需要對(duì)另一種表進(jìn)行聯(lián)接.在這種狀況下,使用EXISTS(或NOTEXISTS)普通將提高查詢效率.低效:SELECT*FROMEMP(基本表)WHEREEMPNO>0ANDDEPTNOIN(SELECTDEPTNOFROMDEPTWHERELOC='MELB')高效:SELECT*FROMEMP(基本表)WHEREEMPNO>0ANDEXISTS(SELECT'X'FROMDEPTWHEREDEPT.DEPTNO=EMP.DEPTNOANDLOC='MELB')十二、用NOTEXISTS代替NOTIN在子查詢中,NOTIN子句將執(zhí)行一種內(nèi)部排序和合并.無(wú)論在哪種狀況下,NOTIN都是最低效(由于它對(duì)子查詢中表執(zhí)行了一種全表遍歷).為了避免使用NOTIN,咱們可以把它改寫成外連接(OuterJoins)或NOTEXISTS.例如:SELECT…FROMEMPWHEREDEPT_NONOTIN(SELECTDEPT_NOFROMDEPTWHEREDEPT_CAT='A');為了提高效率.改寫為:(辦法一:高效)SELECT….FROMEMPA,DEPTBWHEREA.DEPT_NO=B.DEPT(+)ANDB.DEPT_NOISNULLANDB.DEPT_CAT(+)='A'(辦法二:最高效)SELECT….FROMEMPEWHERENOTEXISTS(SELECT'X'FROMDEPTDWHERED.DEPT_NO=E.DEPT_NOANDDEPT_CAT='A');

十三、盡量用UNION-ALL替代UNION當(dāng)SQL語(yǔ)句需要UNION兩個(gè)查詢成果集合時(shí),這兩個(gè)成果集合會(huì)以UNION-ALL方式被合并,然后在輸出最后成果邁進(jìn)行排序.如果用UNIONALL代替UNION,這樣排序就不是必要了.效率就會(huì)因而得到提高.舉例:低效:SELECTACCT_NUM,BALANCE_AMTFROMDEBIT_TRANSACTIONSWHERETRAN_DATE='31-DEC-95'UNIONSELECTACCT_NUM,BALANCE_AMTFROMDEBIT_TRANSACTIONSWHERETRAN_DATE='31-DEC-95'高效:SELECTACCT_NUM,BALANCE_AMTFROMDEBIT_TRANSACTIONSWHERETRAN_DATE='31-DEC-95'UNIONALLSELECTACCT_NUM,BALANCE_AMTFROMDEBIT_TRANSACTIONSWHERETRAN_DATE='31-DEC-95'十四、Orderby語(yǔ)句建議ORDERBY語(yǔ)句決定了Oracle如何將返回查詢成果排序。Orderby語(yǔ)句對(duì)要排序列沒(méi)有什么特別限制,也可以將函數(shù)加入列中(象聯(lián)接或者附加等)。任何在Orderby語(yǔ)句非索引項(xiàng)或者有計(jì)算表達(dá)式都將減少查詢速度。仔細(xì)檢查orderby語(yǔ)句以找出非索引項(xiàng)或者表達(dá)式,它們會(huì)減少性能。解決這個(gè)問(wèn)題辦法就是重寫orderby語(yǔ)句以使用索引,也可覺(jué)得所使用列建立此外一種索引,同步應(yīng)絕對(duì)避免在orderby子句中使用表達(dá)式。十五、避免使用NOT在查詢時(shí)經(jīng)常在where子句使用某些邏輯表達(dá)式,如不不大于、不大于、等于以及不等于等等,也可以使用and(與)、or(或)以及not(非)。NOT可用來(lái)對(duì)任何邏輯運(yùn)算符號(hào)取反。下面是一種NOT子句例子:

...wherenot(status='VALID')

如果要使用NOT,則應(yīng)在取反短語(yǔ)前面加上括號(hào),并在短語(yǔ)前面加上NOT運(yùn)算符。NOT運(yùn)算符包括在此外一種邏輯運(yùn)算符中,這就是不等于(<>)運(yùn)算符。換句話說(shuō),雖然不在查詢where子句中顯式地加入NOT詞,NOT仍在運(yùn)算符中,見(jiàn)下例:

...wherestatus<>'INVALID';

再看下面這個(gè)例子:

select*fromemployeewheresalary<>3000;

對(duì)這個(gè)查詢,可以改寫為不使用NOT:

select*fromemployeewheresalary<3000orsalary>3000;

雖然這兩種查詢成果同樣,但是第二種查詢方案會(huì)比第一種查詢方案更快些。第二種查詢?nèi)菰SOracle對(duì)salary列使用索引,而第一種查詢則不能使用索引。十六、使用DECODE函數(shù)來(lái)減少解決時(shí)間使用DECODE函數(shù)可以避免重復(fù)掃描相似記錄或重復(fù)連接相似表.例如:SELECTCOUNT(*),SUM(SAL)FROMEMPWHEREDEPT_NO=0020ANDENAMELIKE'SMITH%';SELECTCOUNT(*),SUM(SAL)FROMEMPWHEREDEPT_NO=0030ANDENAMELIKE'SMITH%';可以用DECODE函數(shù)高效地得到相似成果SELECTCOUNT(DECODE(DEPT_NO,0020,'X',NULL))D0020_COUNT,COUNT(DECODE(DEPT_NO,0030,'X',NULL))D0030_COUNT,SUM(DECODE(DEPT_NO,0020,SAL,NULL))D0020_SAL,SUM(DECODE(DEPT_NO,0030,SAL,NULL))D0030_SALFROMEMPWHEREENAMELIKE'SMITH%';類似,DECODE函數(shù)也可以運(yùn)用于GROUPBY和ORDERBY子句中.十七、刪除重復(fù)記錄DELETEFROMEMPEWHEREE.ROWID>(SELECTMIN(X.ROWID)FROMEMPXWHEREX.EMP_NO=E.EMP_NO);十八、如果可以使用where條件,盡量不要在having中限制數(shù)據(jù)十九、盡量不要使數(shù)據(jù)排序引起排序條件-Orderby-Groupby-Union,intersect,minus-Distinct二十、使用提示(Hints)對(duì)于表訪問(wèn),可以使用兩種Hints:FULL和ROWIDFULLhint告訴ORACLE使用全表掃描方式訪問(wèn)指定表.例如:SELECT/*+FULL(EMP)*/*FROMEMPWHEREEMPNO=7893;ROWIDhint告訴ORACLE使用TABLEACCESSBYROWID操作訪問(wèn)表.普通,你需要采用TABLEACCESSBYROWID方式特別是當(dāng)訪問(wèn)大表時(shí)候,使用這種方式,你需要懂得ROIWD值或者使用索引。如果一種大表沒(méi)有被設(shè)定為緩存(CACHED)表而你但愿它數(shù)據(jù)在查詢結(jié)束是依然停留在SGA中,你就可以使用CACHEhint來(lái)告訴優(yōu)化器把數(shù)據(jù)保存在SGA中。普通CACHEhint和FULLhint一起使用。例如:SELECT/*+FULL(WORKER)CACHE(WORKER)*/*FROMWORK;索引hint告訴ORACLE使用基于索引掃描方式.你不必闡明詳細(xì)索引名稱例如:SELECT/*+INDEX(aindex_name)*/LODGINGFROMLODGINGaWHEREMANAGER=‘BILLGATES';ORACLEhints還涉及ALL_ROWS,F(xiàn)IRST_ROWS,RULE,USE_NL,USE_MERGE,USE_HASH等等??梢砸勒赵敿?xì)狀況詳細(xì)使用。第三章oracle和sybaseSQL區(qū)別一、大小寫SYBASESQL中數(shù)據(jù)庫(kù)名、表名和列名分大小寫,應(yīng)遵循定義時(shí)寫法;ORACLE并不區(qū)別。二、限制記錄數(shù)量在SYBASESQL中限制紀(jì)錄數(shù)量,需要用EXECSQLSETROWCOUNTn,用完需要執(zhí)行EXECSQLSETROWCOUNT0恢復(fù);而ORACLE中只需要在SQL中用SELECT*FROMtbl_namewhererowcount<n來(lái)限制即可。三、列選取ORACLE執(zhí)行數(shù)據(jù)查詢時(shí)候,SELECT語(yǔ)句必要選取針對(duì)數(shù)據(jù)表。在Oracle數(shù)據(jù)庫(kù)內(nèi)有一種特殊表DUAL。從DUAL表選取數(shù)據(jù)常被用來(lái)通過(guò)SELECT語(yǔ)句計(jì)算常數(shù)表達(dá)式,由于DUAL只有一行數(shù)據(jù),因此常數(shù)只返回一次。Oracle下DUAL查詢?nèi)缦滤荆篠ELECT'x'FROMdual在sybase中,查詢則是下面這個(gè)樣子:SELECT'x'四、連接Oracle用||符號(hào)作為連接符,而sybase連接符是加號(hào):+。Oracle查詢?nèi)缦滤荆篠elect'Name'||'LastName'FromtableName相應(yīng)sybase查詢?nèi)缦滤荆篠elect'Name'+'LastName'五、字符串函數(shù)返回字符串長(zhǎng)度函數(shù)sybase:char_length(string)或datalength(string)oracle:length(string)LENGTH和LENsybase:SELECTLEN('SQLMAG')"Lengthincharacters"oracle:SELECTLENGTH('SQLMAG')"Lengthincharacters"FROMDUAL;六、日期函數(shù)取當(dāng)前系統(tǒng)日期時(shí)間sybase:getdate()返回datetimeeg:selectgetdate()oracle: sysdate返回dateeg:selectsysdatefromdual; 日期加法sybase:selectdateadd(mm,12,getdate())oracle:selectadd_months(sysdate,12)fromdual日期減法

sybase:SELECTdatediff(dd,GetDate(),dateadd(mm,12,getdate()))oracle:SELECTsysdate-add_months(sysdate,12)FROMdual七、數(shù)據(jù)類型轉(zhuǎn)換函數(shù):sybase中轉(zhuǎn)換函數(shù)為convert(datatype,expression[,style]))在oracle中不可用,應(yīng)用如下轉(zhuǎn)換函數(shù):日期轉(zhuǎn)換字符to_char(date)例如:selectto_char(sysdate,’yyyy/mm/ddhh24:mi:ss’)fromdual;成果:1999/09/0816:25:30 selectto_char(sysdate,’yyyymmdd’)fromdual;成果:19990908數(shù)字轉(zhuǎn)換字符to_char(numbers)字符轉(zhuǎn)換日期to_date(string)例如:selectto_date(‘1999/09/0816:25:30’,’yyyy/mm/ddhh24:mi:ss’)fromdual;字符轉(zhuǎn)換數(shù)字to_number(string)八、空值代替函數(shù):sybase中用 isnull(expr1,expr2)oracle 中不能用isnull(),只能用nvl(expr1,expr2)例如:sybase:selectisnull(pro_table_status,'0')fromduct;oracle: selectnvl(pro_table_status,'0')fromduct;九、sybasewhere語(yǔ)句執(zhí)行[]正則符號(hào),但是oracle9i不支持。十、數(shù)字取舍Oracle數(shù)據(jù)庫(kù)內(nèi)有一種TRUNC函數(shù),該函數(shù)返回m位十進(jìn)制數(shù)n位;如果省略m則n就是0位。m值可覺(jué)得負(fù),表達(dá)截去小數(shù)點(diǎn)左邊m位數(shù)字。在Sybase下可以用Round或者Floor。如下是Oracle查詢:SELECTTRUNC(15.79,1)"Truncate"FROMDUAL;下面是同類查詢sybase版本:SELECTROUND(15.79,0)rounded,ROUND(15.79,0,1)truncatedSELECTFLOOR(ROUND(15.79,0)),F(xiàn)LOOR(ROUND(15.79,0,1))第四章跟蹤SQL執(zhí)行籌劃一、理論(一)ORACLE優(yōu)化器Oracle優(yōu)化器有3種基于規(guī)則RULE基于成本COST基于選取CHOOSE設(shè)立缺省優(yōu)化器,可以通過(guò)對(duì)init.ora文獻(xiàn)中OPTIMIZER_MODE參數(shù)設(shè)立,也可以在會(huì)話(session)級(jí)對(duì)其進(jìn)行覆蓋.如果OPTIMZER_MODE=RULE,則激活基于規(guī)則優(yōu)化器(RBO)。基于規(guī)則優(yōu)化器按照一系列語(yǔ)法規(guī)則來(lái)推測(cè)也許執(zhí)行途徑和比較可替代執(zhí)行途徑。如果OPTIMZER_MODE=COST,則激活基于成本優(yōu)化器(CBO)。它使用ANALYZE語(yǔ)句來(lái)生成數(shù)據(jù)庫(kù)對(duì)象記錄數(shù)據(jù)。這些記錄數(shù)據(jù)涉及表行數(shù)、平均長(zhǎng)度及索引中不同核心字?jǐn)?shù)等?;谶@些記錄數(shù)據(jù),成本優(yōu)化器可以計(jì)算出可獲得執(zhí)行途徑成本。并選取具備最小成本執(zhí)行途徑。在CBO模式下,需要經(jīng)常運(yùn)營(yíng)ANALYZE命令來(lái)保證數(shù)據(jù)精確性。如果OPTIMZER_MODE=CHOOSE,實(shí)際優(yōu)化器模式將和與否運(yùn)營(yíng)過(guò)analyze命令關(guān)于.如果table已經(jīng)被analyze過(guò),優(yōu)化器模式將自動(dòng)成為CBO,反之,數(shù)據(jù)庫(kù)將采用RULE形式優(yōu)化器。(二)訪問(wèn)TABLE方式ORACLE采用兩種訪問(wèn)表中記錄方式:全表掃描

全表掃描就是順序地訪問(wèn)表中每條記錄.

ORACLE采用一次讀入各種數(shù)據(jù)塊方式優(yōu)化全表掃描。ROWID定為訪問(wèn)

ORACLE采用索引實(shí)現(xiàn)了數(shù)據(jù)和存儲(chǔ)數(shù)據(jù)物理位置(ROWID)之間聯(lián)系。普通索引提供了迅速訪問(wèn)ROWID辦法,因而那些基于索引列查詢就可以得到性能上提高。(三)索引訪問(wèn)方式Oracle有兩種索引訪問(wèn)方式索引唯一掃描

(

INDEX

UNIQUE

SCAN)如:表LOADING有兩個(gè)索引

:

建立在LOADING列上唯一性索引LOADING_PK和建立在MANAGER列上非唯一性索引IDX_MANAGER。

SELECT

*FROM

LOADINGWHERE

LOADING

=

‘ROSE

HILL’;

在內(nèi)部,上述SQL將被提成兩步執(zhí)行,一方面,LOADING_PK

索引將通過(guò)索引唯一掃描方式被訪問(wèn),獲得相相應(yīng)ROWID,通過(guò)ROWID訪問(wèn)表方式執(zhí)行下一步檢索。

如果被檢索返回列涉及INDEX列中,ORACLE將不執(zhí)行第二步解決(通過(guò)ROWID訪問(wèn)表)。

由于檢索數(shù)據(jù)保存在索引中,單單訪問(wèn)索引就可以完全滿足查詢成果。

SELECT

LOADING

FROM

LOADINGWHERE

LOADING

=

‘ROSE

HILL’;2、索引范疇查詢(INDEX

RANGE

SCAN)合用于兩種狀況:1、

基于一種范疇檢索2、

基于非唯一性索引檢索

例1:

SELECT

LOADING

FROM

LOADINGWHERE

LOADING

LIKE

‘M%’;WHERE子句條件涉及一系列值,

ORACLE

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論