版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
ORACLE數(shù)據(jù)庫操作手冊(cè)2[1]0
中國通信集團(tuán)公司安徽有限公司
計(jì)費(fèi)業(yè)務(wù)部
2007年11月
修改記錄
版本日期編輯者編輯內(nèi)容
1.02006/2/10見春蕾形成初稿
1.12007/8/31見春蕾根據(jù)實(shí)際情況修訂部分
章節(jié)
2.02007/11/05見春蕾一、在第一章(數(shù)據(jù)庫使
用注意事項(xiàng))中增加了關(guān)
于批量更新數(shù)據(jù)的大事
務(wù)分次提交的要求、客戶
端的配置方法、修改密碼
方法;
二、在第二章(SQL編寫
注意事項(xiàng))中增加了關(guān)于
提示(Hints)的使用。
三、增加了第四章(跟蹤
SQL執(zhí)行計(jì)劃),闡述了有
關(guān)的理論知識(shí)與SQL執(zhí)行
計(jì)劃的跟蹤方法。
目錄
ORACLE數(shù)據(jù)庫操作手冊(cè)2.0.......................................錯(cuò)誤!未定義書簽。
笫一章數(shù)據(jù)庫使用注意事項(xiàng).......................................................3
二、不使用數(shù)據(jù)庫時(shí)請(qǐng)及時(shí)關(guān)閉數(shù)據(jù)庫連接,但是也不能頻繁的連接與斷開.......3
三、執(zhí)行了DML操作,請(qǐng)按業(yè)務(wù)規(guī)則,不要不記得執(zhí)行COMMIT或者ROLLBACK。........3
四、假如是查詢與統(tǒng)計(jì)不涉及到當(dāng)天的業(yè)務(wù)時(shí),不要在生產(chǎn)環(huán)境里操作,在BCV庫中操
作。BCV每天晚上12點(diǎn)同步一次,數(shù)據(jù)與用戶口令、密碼與生產(chǎn)環(huán)境相同。......3
五、關(guān)聯(lián)表都很大的查詢與統(tǒng)計(jì)也盡量用BCV庫。...............................4
六、生產(chǎn)環(huán)境營業(yè)時(shí)間(特別是營業(yè)高峰時(shí)間,目前是上午8:00-10:00,下午3:00-4:00)
禁止做大數(shù)據(jù)量的查詢與統(tǒng)計(jì),每個(gè)查詢的執(zhí)行時(shí)間要操縱在1分鐘內(nèi)。.........4
七、不要執(zhí)行索引與表的信息的收集。.........................................4
八、編寫程序的時(shí)候,注意SQL語句規(guī)范,盡量使用變量綁定,減少共享池的使用。
................................................................4
九、按照標(biāo)準(zhǔn)要求編寫pl/sql等程序,注意事務(wù)的提交、回滾與對(duì)各類特殊情況的處
理。..........................................................................4
十、要查看表字段名或者隨機(jī)的少量數(shù)據(jù)時(shí)候,使用desc、也能夠使用wherel=2或者
者rowcountXn來查看,而盡量不要直接執(zhí)行select*fromtablename,然后kill會(huì)
話。..........................................................................4
十一、盡量使用索引,避免出現(xiàn)全表掃描,性能影響比單機(jī)更大。................4
十二、對(duì)分區(qū)表建立索引時(shí),使用local選項(xiàng)。.................................4
十三、不要在事務(wù)中引入Trigger,建議在事務(wù)中實(shí)現(xiàn)............................4
十四、批量更新數(shù)據(jù)的大的事務(wù)分次提交。.....................................4
十五、客戶端的配置,.........................................................5
十六、修改密碼。.............................................................5
第二章SQL編寫注意事項(xiàng).........................................................7
一、SELECT子句中避免使用*..................................................7
二、查找總記錄數(shù)時(shí),盡量不要用count(*),而要指定一個(gè)有索引的字段。.......7
三、將大的歷史表創(chuàng)建為分區(qū)表,便于數(shù)據(jù)轉(zhuǎn)儲(chǔ)與刪除。.........................7
四、使用分區(qū)表進(jìn)行查詢時(shí),盡量把分區(qū)鍵作為查詢條件的第一個(gè)條件。..........7
五、Sequence使用cache/noorder,假如在使用sequence上的列建索弓I,建議加大cache
值。..........................................................................7
六、在FROM子句中包含多個(gè)表的情況下,選擇記錄條數(shù)最少的表作為基礎(chǔ)表,放在FROM
子句的最后面。...............................................................7
七、WHERE子句中的連接順序...................................................8
八、在需要無條件刪除表中數(shù)據(jù)時(shí),用truncate代替delete。...................8
九、語句中盡量使用表的索引字段,避免做大表的全表掃描。....................8
十、帶通配符(%)的like語句...............................................9
H-一、用EXISTS替代1N..............................................9
十一、用NOTEXISTS替代NOTIN.......................................9
十三、盡可能的用UNION-ALL替換UNION................................10
十四、Orderby語句建議.....................................................10
十五、避免使用NOT.................................................11
十六、使用DECODE函數(shù)來減少處理時(shí)間........................................11
十七、刪除重復(fù)記錄..........................................................12
十八、假如能夠使用where條件,盡量不要在having中限制數(shù)據(jù)................12
十九、盡量不要使數(shù)據(jù)排序....................................................12
二十、使用提示(Hints)..............................................12
第三章oracle與Sybase的SQL區(qū)另1.......................................13
一、大小寫...................................................................13
二、限制記錄數(shù)量............................................................13
三、列的選擇.................................................................13
四、連接.....................................................................13
五、字符串函數(shù)..............................................................13
六、日期函數(shù).................................................................14
七、數(shù)據(jù)類型轉(zhuǎn)換函數(shù):.......................................................14
八、空值替代函數(shù):...........................................................14
九、Sybase的where語句執(zhí)行[]正則符號(hào),但是oracle9i不支持。.............14
十、數(shù)字取舍.................................................................14
第四章跟蹤SQL執(zhí)行計(jì)劃.........................................................15
一、理論.....................................................................15
(一)ORACLE優(yōu)化器..........................................................15
(二)訪問TABLE的方式......................................................15
(三)索引訪問方式.........................................................16
二、SETTRACE跟蹤sql執(zhí)行計(jì)劃..............................................16
第一章數(shù)據(jù)庫使用注意事項(xiàng)
一、對(duì)BOSSL5營帳庫,營業(yè)網(wǎng)址嚴(yán)格按照要求進(jìn)行配置,不可隨意更換。
營業(yè)網(wǎng)址要求按照下面方式進(jìn)行分配配置,假如隨意更換,會(huì)增加營業(yè)主機(jī)間的數(shù)據(jù)交互,
影響數(shù)據(jù)庫性能,降低營業(yè)工作效率。
合肥、六安、阜陽、宿州、亳州、淮北、黃山、銅陵配置:
或者者
蕪湖、蚌埠、淮南、馬鞍山、安慶、滁州、宣城、巢湖、池州,配置如下:
或者者
二、不使用數(shù)據(jù)庫時(shí)請(qǐng)及時(shí)關(guān)閉數(shù)據(jù)庫連接,但是也不能頻繁的連接與斷開
數(shù)據(jù)庫連接也是數(shù)據(jù)庫的寶貴資源,數(shù)據(jù)庫支持的數(shù)據(jù)庫連接有限,當(dāng)不需要使用數(shù)據(jù)庫時(shí),
請(qǐng)“優(yōu)雅”的退出數(shù)據(jù)庫吧,假如能正常退出,請(qǐng)別“結(jié)其任務(wù)”或者KILL-9。假如正在執(zhí)行
SQL的時(shí)候突然特殊終端,請(qǐng)聯(lián)系數(shù)據(jù)庫管理員檢叁處理,以防止數(shù)據(jù)庫一直占用該SQL有關(guān)資
源。
三、執(zhí)行了DML操作,請(qǐng)按業(yè)務(wù)規(guī)則,不要不記得執(zhí)行COMMIT或者ROLLBACK。
不要只執(zhí)行語句,而不操縱事務(wù)。當(dāng)你執(zhí)行一條DML語句時(shí),數(shù)據(jù)庫會(huì)為你分配鎖、回滾段、
REDOLOGBUFFER等資源。事務(wù)結(jié)束后,這些資源才能得以釋放。
四、假如是查詢與統(tǒng)計(jì)不涉及到當(dāng)天的業(yè)務(wù)時(shí),不要在生產(chǎn)環(huán)境里操作,在BCV
庫中操作。BCV每天晚上12點(diǎn)同步一次,數(shù)據(jù)與用戶口令、密碼與生產(chǎn)環(huán)境相
同。
bcv是一個(gè)節(jié)點(diǎn)的數(shù)據(jù)庫,所有的地市的查詢的連接配置是同一個(gè),如下:
YZDBBCV=
(DESCRIPTION=
(ADDRESSLIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=10.153.192.45)(PORT=1521))
)
(CONNECT_DATA=
(SERVICE_NAME=yzdb)
)
)
五、關(guān)聯(lián)表都很大的查詢與統(tǒng)計(jì)也盡量用BCV庫。
六、生產(chǎn)環(huán)境營業(yè)時(shí)間(特別是營業(yè)高峰時(shí)間,目前是上午8:00-10:00,下午
3:00-4:00)禁止做大數(shù)據(jù)量的查詢與統(tǒng)計(jì),每個(gè)查詢的執(zhí)行時(shí)間要操縱在1分
鐘內(nèi)。
七、不要執(zhí)行索引與表的信息的收集。
八、編寫程序的時(shí)候,注意SQL語句規(guī)范,盡量使用變量綁定,減少共享池
的使用。
九、按照標(biāo)準(zhǔn)要求編寫pl/sql等程序,注意事務(wù)的提交、回滾與對(duì)各類特殊情
況的處理。
十、要查看表字段名或者隨機(jī)的少量數(shù)據(jù)時(shí)候,使用desc、也能夠使用wherel=2
或者者rowcountVn來查看,而盡量不要直接執(zhí)行select*fromtablename?然
后kill會(huì)話。
十一、盡量使用索引,避免出現(xiàn)全表掃描,性能影響比單機(jī)更大。
十二、對(duì)分區(qū)表建立索引時(shí),使用local選項(xiàng)。
十三、不要在事務(wù)中引入Trigger,建議在事務(wù)中實(shí)現(xiàn)。
十四、批量更新數(shù)據(jù)的大的事務(wù)分次提交。
在營帳數(shù)據(jù)庫系統(tǒng)繁忙時(shí)候,大于300萬的數(shù)據(jù)刷新,建議分次提交,減少特殊發(fā)生。
系統(tǒng)空閑時(shí),大于800萬的數(shù)據(jù)刷新,建議分次提交。
十五、客戶端的配置。
方法一、直接修改tnsnames.ora
YZDBBCV=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=10.147.192.45)(PORT=1521))
)
(CONNECT_DATA=
(SERVICE_NAME=yzdb)
)
)
方法二、使用客戶端工具
?adsin.3,X
文年Q)夕輯11)
o后退-」
WtQ)|&D:W>cl<vflHBJ
文悴要修改日期
HOMTlClt2005-10C3ie31
£口UB???1"”毋Off>c2002&73823
sgk每ca二蘆2OO7P7-231954
?口?■】or”必2002&73623
S。7ORA文怦2007-01-101034
?gaORA文傳2006-12-20OH
SQMORA文件2WP7-231954
62002-01-26901
ORA文M2WP7P1954
?latera?(Ei?l<
回?Aer0“C0Hie?
jDbArlkitn
*Oracle0r?2Ga?92■(JWhc.ScaD.val-xZ
國?ier?!鞍?/p>
?CcAfafwation5dT?<lt>AdBinistrationf?rYinds??MT
Q??XlhCA
(3Ejtttrj<>s*hctaD?t?b?s?C?oficurggAssisttfkt
9OrtOLDB
Q?97?7QtttckTouriD*ld>ai?V>sr&Ais>it*nl
爭力加
OI?t?Crat?dTodtEnteij?i???My”Cootfi(vrationAvtttta^t
。Ortel*KIT?Strvtr—Buildtf
COMO1?I?cr9*?ftODXAdMaMrZ”
4t)R?1““DysLtigM?tCc?tic?r?tion
用在方用比)
d-rtet1。d\89—\or35nU?Meh3
:3開始aORMZLESDR?q>>'41951
十六、修改密碼。
用sql*plus使用賬號(hào)連接數(shù)據(jù)庫
能夠從菜單進(jìn)入
也能夠從命令行窗口進(jìn)入
方法一、使用password命令
方法一、使用alter命令
Alteruser賬號(hào)identifiedby密碼
密碼規(guī)則問題:
有字符、數(shù)字、特殊字符
要六位以上
與往常密碼不能有三個(gè)以上相同的字符
第二章SQL編寫注意事項(xiàng)
一、SELECT子句中避免使用*
在SELECT子句中列內(nèi)所有的列時(shí),使用*很方便,但是效率低。由于ORACLE在解析的過
程中,會(huì)查詢數(shù)據(jù)字典,將*依次轉(zhuǎn)換成所有的列名。因此,直接在SELECT子句中寫出想要顯示
的列。
二、查找總記錄數(shù)時(shí),盡量不要用count(*),而要指定一個(gè)有索引的字段c
比如索引列為index,使用count(index),這樣能利月索引。
三、將大的歷史表創(chuàng)建為分區(qū)表,便于數(shù)據(jù)轉(zhuǎn)儲(chǔ)與刪除C
四、使用分區(qū)表進(jìn)行查詢時(shí),盡量把分區(qū)鍵作為查詢條件的第一個(gè)條件。
五、Sequence使用cache/noorder,假如在使用sequence上的列建索引,建議
加大cache值。
六、在FROM子句中包含多個(gè)表的情況下,選擇記錄條數(shù)最少的表作為基礎(chǔ)表,
放在FROM子句的最后面。
由于在基于規(guī)則的優(yōu)化器中,ORACLE的解析器按照從右到左的順序處理FROM子句中的表名。
FROM子句中寫在最后的表將被最先處理。
比如:
表TAB116,384條記錄
表TAB25條記錄
選擇TAB2作為基礎(chǔ)表(最好的方法)
selectcount(*)fromtabi,tab2...執(zhí)行時(shí)間0.96秒
選擇TABI作為基礎(chǔ)表(不佳的方法)
selectcount(*)fromtab2,tabi...執(zhí)行時(shí)間26.09秒
假如有3個(gè)以上的表連接查詢,那就需要選擇交叉表作為基礎(chǔ)表,交叉表是指那個(gè)被其他表
所引用的表
比如:
EMP表描述了LOCATION表與CATEGORY表的交集
SELECT*
FROMLOCATIONL,
CATEGORYC,
EMPE
WHEREE.EMPNOBETWEEN1000AND2000
ANDE.CAT_NO=C.CAT_NO
ANDE.LOCN=L.LOCN
將比下列SQL更有效率
SELECT*
FROMEMPE,
LOCATIONL,
CATEGORYC
WHEREE.CAT_NO=C.CATNO
ANDE.LOCN=L.LOCN
ANDE.EMP.NOBETWEEN1000AND2000
七、WHERE子句中的連接順序
ORACLE使用自下而上的順序解析叩IERE子句。根據(jù)這個(gè)原理,表之間的連接務(wù)必寫在其他
WHERE條件之前,那些能夠過濾掉最大數(shù)量記錄的條件務(wù)必寫在WHERE子句的末尾。
比如:
(低效,執(zhí)行時(shí)間156.3秒)
SELECT*
FROMEMPE
WHERESAL>50000
ANDJOB='MANAGER1
AND25<(SELECTCOUNT(*)FROMEMPWHEREMGR=E.EMPNO);
(高效,執(zhí)行時(shí)間10.6W
SELECT*
FROMEMPE
WHERE25<(SELECTCOUNT(*)FROMEMPWHEREMGR=E.EMPNO)
ANDSAL>50000
ANDJOB='MANAGER1;
八、在需要無條件刪除表中數(shù)據(jù)時(shí),用truncate代替delete。
九、語句中盡量使用表的索引字段,避免做大表的全表掃描。
比如Where子句中有聯(lián)接的列,即使最后的聯(lián)接值為一個(gè)靜態(tài)值,也不可能使用索引。
select*fromemployee
wherefirst_nameII''Ilast_name='BeillCliton';
這條語句沒有使用基于lastname創(chuàng)建的索引.
當(dāng)使用下面這種SQL語句的編寫,Oracle系統(tǒng)就能夠使用基于lastjame創(chuàng)建的索引。
Select*fromemployee
wherefirst_namc='3ciirandlast_namc='Clitcn';
十、帶通配符(%)的like語句
比如SQL語句:
select*fromemployeewherelast_namelike'%cliton%';
由于通配符(%)在搜尋詞首出現(xiàn),因此Oracle系統(tǒng)不使用last_namc的索引。通配符如
此使用會(huì)降低查詢速度。當(dāng)通配符出現(xiàn)在字符串其他位置時(shí),優(yōu)化器就能利用索引。在下面的查
詢中索引得到了使用:
select*fromemployeewherelastnameliketc%';
H"一、用EXISTS替代IN
在許多基于基礎(chǔ)表的查詢中,為了滿足一個(gè)條件,往往需要對(duì)另一個(gè)表進(jìn)行聯(lián)接在這種情
況下,使用EXISTS(或者NOTEXISTS)通常將提高查詢的效率.
低效:
SELECT*
FROMEMP(基礎(chǔ)表)
WHEREEMPNO>0
ANDDEPTNOIN(SELECTDEPTNO
FROMDEPT
WHERELOC='MELB')
高效:
SELECT*
FROMEMP(基礎(chǔ)表)
WHEREEMPNO>0
ANDEXISTS(SELECT'X'
FROMDEPT
WHEREDEPT.DEPTNO=EMP.DEPTNO
ANDLOC='MELB')
十二、用NOTEXISTS替代NOTIN
在子查詢中,NOTIN子句將執(zhí)行一個(gè)內(nèi)部的排序與合并.不管在哪種情況下,NOTIN都是最
低效的(由于它對(duì)子查詢中的表執(zhí)行了一個(gè)全表遍歷).為了避免使用NOTIN,我們能夠把它改
寫成外連接(OuterJoins)或者NOTEXISTS.
比如:
SELECT…
FROMEMP
WHEREDEPT_NONOTIN(SELECTDEPT_NO
FROMDEPT
WHEREF)EPT_CAT=,A,):
為了提高效率.改寫為:
(方法一:高效)
SELECT
FROMEMPA,DEPTB
WHEREA.DEPT_NO=B.DEPT(+)
ANDB.DEPT_NOISNULL
ANDB.DEPT_CAT(+)='A'
(方法二:最高效)
SELECT….
FROMEMPE
WHERENOTEXISTS(SELECT'X'
FROMDEPTD
WHERED.DEPT_NO=E.DEPT.NO
ANDDEPT_CAT='A');
十三、盡可能的用UNION-ALL替換UNION
當(dāng)SQL語句需要UNION兩個(gè)查詢結(jié)果集合時(shí),這兩個(gè)結(jié)果集合會(huì)以UNION-ALL的方式被合并,
然后在輸出最終結(jié)果前進(jìn)行排序.
假如用UNIONALL替代UNION,這樣排序就不是必要了.效率就會(huì)因此得到提高.
舉例:
低效:
SELECTACCT_NUM,BALANCE_AMT
FROMDEBIT_TRANSACTTONS
WHERETRAN_DATE='31-DEC-951
UNION
SELECTACCT_NUM,BALANCE_AMT
FROMDEBIT_TRANSACTIONS
WHERETRAN_DATE='31-DEC-95'
高效:
SELECTACCT_NUM,BALANCE_AMT
FROMDEBITTRANSACTIONS
WHERETRANDATE='31-DEC-95'
UNIONALL
SELECTACCTNUM,BALANCE.AMT
FROMDEBIT_TRANSACTIONS
WHERETRAN_DATE='31-DEC-95'
十四、Orderby語句建議
ORDERBY語句決定了Oracle如何將返回的查詢結(jié)果排,孑。Orderby語句對(duì)要排序的列沒有
什么特別的限制,也能夠?qū)⒑瘮?shù)加入列中(象聯(lián)接或者者附加等)。任何在Orderby語句的非索
引項(xiàng)或者者有計(jì)算表達(dá)式都將降低查詢速度。
認(rèn)真檢查。rderby語句以找出非索引項(xiàng)或者者表達(dá)式,它們會(huì)降低性能。解決這個(gè)問題的辦
法就是重寫。rderby語句以使用索引,也能夠?yàn)樗褂玫牧薪⒘硗庖粋€(gè)索引,同時(shí)應(yīng)絕對(duì)避
免在。rderby子句中使用表達(dá)式。
十五、避免使用NOT
在查詢時(shí)經(jīng)常在where子句使用一些邏輯表達(dá)式,如大于、小于、等于與不等于等等,也能
夠使用and(與)、or(或者)與not(非)。NOT可用來對(duì)任何邏輯運(yùn)算符號(hào)取反。下面是一個(gè)
NOT子句的例子:
...wherenot(status='VALID')
假如要使用NOT,則應(yīng)在取反的短語前面加上括號(hào),并在短語前面加上NOT運(yùn)算符。NOT運(yùn)
算符包含在另外一個(gè)邏輯運(yùn)算符中,這就是不等于(?)運(yùn)算符。換句話說,即使不在查詢where
子句中顯式地加入NOT詞,NOT仍在運(yùn)算符中,見下例:
...wherestatus<>INVALID,;
再看下面這個(gè)例子:
select*fromemployeewheresalary<>3000;
對(duì)這個(gè)查詢,能夠改寫為不使用NOT:
select*fromemployeewheresalary<3000orsalary>3000:
盡管這兩種查詢的結(jié)果一樣,但是第二種查詢方案會(huì)比第一種查詢方案更快些。第二種查詢
同意Oracle對(duì)salary列使用索引,而第一種查詢則不能使用索引。
十六、使用DECODE函數(shù)來減少處理時(shí)間
使用DECODE函數(shù)能夠配免重復(fù)掃描相同記錄或者重復(fù)連接相同的表.
比如:
SELECTCOUNT(*),SUM(SAL)
FROMEMP
WHEREDEPT_NO=0020
ANDENAMELIKE'SMITH%';
SELECTCOUNT(*),SUM(SAL)
FROMEMP
WHEREDEPT_NO=0030
ANDENAMELIKE'SMITH%';
能夠用DECODE函數(shù)高效地得到相同結(jié)果
SELECTCOUNT(DECODE(DEPT_NO,0020,rXr,NULL))D0020_COUNT,
C0UNT(DECODE(DEPT_N0,0030,'X1,NULL))D0030_C0UNT,
SUM(DECODE(DEPT_NO,0020,SAL,NULL))D0020_SAL,
SUM(DECODE(DEPTNO,0030,SAL,NULL))D0030SAL
FROMEMPWHEREENAMELIKE'SMITH%';
類似的,DECODE函數(shù)也能夠運(yùn)用于GROUPBY與ORDERBY子句中.
十七、刪除重復(fù)記錄
DELETEFROMEMPE
WHEREE.ROWID>(SELECTMIN(X.ROWID)
FROMEMPX
WHEREX.EMP_NO=E.EMP一NO);
十八、假如能夠使用where條件,盡量不要在having中限制數(shù)據(jù)
十九、盡量不要使數(shù)據(jù)排序
引起排序的條件
-Orderby
-Groupby
-Union,intersect,minus
-Distinct
二十、使用提示(Hints)
關(guān)于表的訪問,能夠使用兩種Hints:FULL與ROWID
?FULLhint告訴ORACLE使用全表掃描的方式訪問指定表.
比如:
SELECT/*+FULL(EMP)*/*
FROMEMP
WHEREEMPNO=7893;
?ROWIDhint告訴ORACLE使用TABLEACCESSBYROWID的操作訪問表.
通常,你需要使用TABLEACCESSBYROWID的方式特別是當(dāng)訪問大表的時(shí)候,使用這種方
式,你需要明白R(shí)0IM)的值或者者使用索引。
假如一個(gè)大表沒有被設(shè)定為緩存(CACHED)表而你希望它的數(shù)據(jù)在查詢結(jié)束是仍然停留在
SGA中,你就能夠使用CACHEhint來告訴優(yōu)化器把數(shù)據(jù)保留在SGA中。通常CACHEhir.t與
FULLhint一起使用。
比如:
SELECT/*+FULL(WORKER)CACHE(WORKER)*/*
FROMWORK;
索引hint告訴ORACLE使用基于索引的掃描方式.你不必說明具體的索引名稱
比如:
SELECT/*+INDEX(aindexname)*/LODGING
FROMLODGINGa
WHEREMANAGER='BILLGATES';
ORACLEhints還包含ALL.ROWS,FIRST_ROWS,RULE,USE_NL,USE_MERGE,USE_HASH等
等。能夠根據(jù)具體情況具體使用。
第三章oracle與Sybase的SQL區(qū)別
一、大小寫
SYBASE的SQL中數(shù)據(jù)庫名、表名與列名分大小寫,應(yīng)遵循定義時(shí)的寫法;ORACLE并不區(qū)分。
二、限制記錄數(shù)量
在SYBASESQL中限制紀(jì)錄的數(shù)量,需要用EXECSQLSETROWCOUNTn,用完需要執(zhí)行EXEC
SQLSETROWCOUNT0恢復(fù);而ORACLE中只需要在SQL中用SELECT*FROMwhere
rowcount<n來限制即可。
三、列的選擇
ORACLE執(zhí)行數(shù)據(jù)查詢的時(shí)候,SELECT語句務(wù)必選擇針對(duì)的數(shù)據(jù)表.在Oracle數(shù)據(jù)庫內(nèi)有一
種特殊的表DUAL。從DUAL表選擇數(shù)據(jù)常被用來通過SELECT語句計(jì)算常數(shù)表達(dá)式,由于DUAL只
有一行數(shù)據(jù),因此常數(shù)只返回一次。
Oracle下的DUAL查詢?nèi)缦滤荆?/p>
SELECT'x'FROMdual
在Sybase中,查詢則是下面這個(gè)樣子:
SELECT'x'
四、連接
Oracle用||符號(hào)作為連接符,而Sybase的連接符是加號(hào):+。
Oracle查詢?nèi)缦滤荆?/p>
Select'Name'II'LastName'FromtabieName
對(duì)應(yīng)的Sybase查詢?nèi)缦滤荆?/p>
Select'Name'+'LastName'
五、字符串函數(shù)
返回字符串長度函數(shù)
Sybase:char_length(string)或者dataiength(string)
oracle:length(string)
LENGTH與LEN
Sybase:SELECTLEN(SQLMAG1)"Lengthincharacters"
oracle:SELECTLENGIHCSQLMAG')"Lengthincharacters"FROMDUAL;
六、日期函數(shù)
取當(dāng)前系統(tǒng)日期時(shí)間
Sybase:getdateO返回datetimeeg:selectgetdateO
oracle:sysdate返回daleeg:selectsysdatefromdual;
日期的加法
Sybase:selectdatcadd(mm,12,getdateO)
oracle:selectaddmonths(sysdate,12)fromdual
日期的減法
Sybase:SELECTdatediff(dd,GetDateO.dateadd(mm,12,getdateO))
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)
比如:selecttochar(sysdate,'yyyy/mm/ddhh24:mi:ss')fromdual;
結(jié)果:1999/09/0816:25:30
selecttochar(sysdate,*yyyymmdd,)fromdual;
結(jié)果:19990908
數(shù)字轉(zhuǎn)換字符tochar(numbers)
字符轉(zhuǎn)換日期to_date(string)
比如:selectto_date(*1999/09/0816:25:30*Jyyyy/nun/ddhh24:mi:ss,)
fromdual;
字符轉(zhuǎn)換數(shù)字to_number(string)
八、空值替代函數(shù):
Sybase中用isnull(exprl,expr2)
oracle中不能用isnull(),只能用nvl(exprl,expr2)
比如:
Sybase:selectisnull(pro_table_status,'0')frompos.product;
oracle:selectnvl(pro_table_status,'0')frompos.product;
九、Sybase的where語句執(zhí)行[]正則符號(hào),但是oracle9i不支持。
十、數(shù)字取舍
Oracle數(shù)據(jù)庫內(nèi)有一個(gè)TRUNC函數(shù),該函數(shù)返回m位十進(jìn)制數(shù)的n位;假如省略m則n就
是0位。m的值能夠?yàn)槔?表示截去小數(shù)點(diǎn)左邊m位數(shù)字.
在Sybase下能夠用Round或者者Floor<)
T列是Oracle查詢:
SELECTT1WNC(15.79.1)"Truncate"EROMDUAL;
下面是同類查詢的Sybase版本:
SELECTROUND(15.79,0)rounded,ROUND(15.79,0,1)truncated
SELECTFLOOR(ROUND(15.79,0)),FLOOR(ROUND(15.79,0.1))
第四章跟蹤SQL執(zhí)行計(jì)劃
一、理論
(一)ORACLE優(yōu)化器
?Oracle的優(yōu)化器有3種
基于規(guī)則RULE
基于成本COST
基于選擇CHOOSE
?設(shè)置缺省的優(yōu)化器,能夠通過對(duì)init.ora文件中OPTIMIZERJIODE參數(shù)設(shè)置,也能夠在會(huì)話
(session)級(jí)對(duì)其進(jìn)行覆蓋.
?假如OPTIMZER_MODE=RULE,則激活基于規(guī)則的優(yōu)化器1RB0)。基于規(guī)則的優(yōu)化器按照一系列
的語法規(guī)則來推測可能執(zhí)行路徑與比較可替換的執(zhí)行路徑。
?假如OPTIMZERJIODEXOST,則激活基于成本的優(yōu)化器[CBO)。它使用ANALYZE語句來生成數(shù)
據(jù)庫對(duì)象的統(tǒng)計(jì)數(shù)據(jù)。這些統(tǒng)計(jì)數(shù)據(jù)包含表的行數(shù)、平均長度及索引中不一致的關(guān)鍵字?jǐn)?shù)
等。甚于這些統(tǒng)計(jì)數(shù)據(jù),成本優(yōu)化器能夠計(jì)算出可獲得的執(zhí)行路徑的成本。并選擇具有最
小的成本執(zhí)行路徑。在CBO模式下,需要經(jīng)常運(yùn)行ANALYZE命令來確保數(shù)據(jù)的準(zhǔn)確性。
?假如OPTIMZERMODEXHOOSE,實(shí)際的優(yōu)化器模式將與是否運(yùn)行過analyze命令有關(guān).假如
table已經(jīng)被analyze過,優(yōu)化器模式將自動(dòng)成為CBG,反之,數(shù)據(jù)庫將使用RULE形式的
優(yōu)化器。
(二)訪問TABLE的方式
ORACLE使用兩種訪問表中記錄的方式:
?全表掃描
全表掃描就是順序地訪問表中每條記錄.ORACLE使用一次讀入
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度國際貿(mào)易物流運(yùn)輸合同3篇
- 2024年城市綜合體停車場租賃管理服務(wù)協(xié)議2篇
- 洛陽文化旅游職業(yè)學(xué)院《框架開發(fā)》2023-2024學(xué)年第一學(xué)期期末試卷
- 洛陽商業(yè)職業(yè)學(xué)院《素描4(油畫方向)》2023-2024學(xué)年第一學(xué)期期末試卷
- 影視項(xiàng)目部攝影師聘用合同
- 2024年太陽能光伏發(fā)電項(xiàng)目電力設(shè)施遷移與接入合同3篇
- 清潔公司精裝房施工合同
- 2024年某科技公司關(guān)于云計(jì)算服務(wù)提供合同
- 2025泥工包工合同范文
- 市場研究保密風(fēng)險(xiǎn)評(píng)估報(bào)告
- 人音版音樂七年級(jí)上冊(cè)《父親的草原母親的河》課件
- 2024年度短視頻內(nèi)容創(chuàng)作服務(wù)合同3篇
- 2024年度拼多多店鋪托管經(jīng)營合同2篇
- 2023年北京腫瘤醫(yī)院(含社會(huì)人員)招聘筆試真題
- 能源管理總結(jié)報(bào)告
- 2024年時(shí)事政治試題庫
- 2024-2025學(xué)年統(tǒng)編版五年級(jí)語文上冊(cè)第七單元達(dá)標(biāo)檢測卷(原卷+答案)
- 人教版七年級(jí)語文上冊(cè)《課內(nèi)文言文基礎(chǔ)知識(shí) 》專項(xiàng)測試卷及答案
- 【初中數(shù)學(xué)】基本平面圖形單元測試 2024-2025學(xué)年北師大版數(shù)學(xué)七年級(jí)上冊(cè)
- 旅行社分店加盟協(xié)議書(2篇)
- 城鎮(zhèn)燃?xì)饨?jīng)營安全重大隱患判定及燃?xì)獍踩芾韺n}培訓(xùn)
評(píng)論
0/150
提交評(píng)論