版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、ORACLE設(shè)計(jì)規(guī)范 1、數(shù)據(jù)庫(kù)模型設(shè)計(jì)方法規(guī)范 1。1、數(shù)據(jù)建模原則性規(guī)范 原則 對(duì)于涉及數(shù)據(jù)庫(kù)的項(xiàng)目,需要構(gòu)建數(shù)據(jù)庫(kù)邏輯模型圖,邏輯模型圖是項(xiàng)目組成員之間在數(shù)據(jù)庫(kù)層面溝通交互的依據(jù),必須規(guī)范畫(huà)圖(表,主鍵,外鍵,關(guān)系) 衡量 對(duì)于表的個(gè)數(shù)在20個(gè)以上的模型,需要數(shù)據(jù)組參與設(shè)計(jì),并 需DBA作最終審核 方法 對(duì)于OLTP系統(tǒng),采用范式化思想進(jìn)行模型設(shè)計(jì),對(duì)于OLAP 系統(tǒng),采用面向問(wèn)題及多級(jí)顆粒度的思想進(jìn)行模型設(shè)計(jì) 實(shí)施 采用主流的模型設(shè)計(jì)軟件工具PowerDesigner,ERStudio, ERWin 1.2、實(shí)體型之間關(guān)系認(rèn)定規(guī)范 原則 所有實(shí)體型間的業(yè)務(wù)邏輯關(guān)系,除了語(yǔ)義上保留其原有
2、的業(yè) 務(wù)關(guān)系外,本質(zhì)上都要轉(zhuǎn)化成關(guān)系數(shù)據(jù)庫(kù)的三種關(guān)系(1:1)(1: N)(N:M) 衡量 對(duì)于3個(gè)及以上實(shí)體型之間的多元關(guān)系”,需要數(shù)據(jù)組參與 設(shè)計(jì) 方法 比如實(shí)體型A和實(shí)體型B之間的關(guān)系,可以通過(guò)問(wèn)兩個(gè)問(wèn)題 來(lái)確定他們之間的關(guān)系:一個(gè)A可以對(duì)應(yīng)幾個(gè)B?一個(gè)B可以 對(duì)應(yīng)幾個(gè)A? (1) 一個(gè)A對(duì)應(yīng)一個(gè)B,相反一個(gè)B對(duì)應(yīng)一個(gè)A,那么A對(duì) B就是1:1關(guān)系; (2)一個(gè)A對(duì)應(yīng)多個(gè)B,相反一個(gè)B對(duì)應(yīng)一個(gè)A,那么A對(duì)B 就是1:N關(guān)系; (3)一個(gè)A對(duì)應(yīng)多個(gè)B,相反一個(gè)B對(duì)應(yīng)又t個(gè)A,那么A對(duì)B 就是N:M關(guān)系; (1)1:1關(guān)系選取任何一個(gè)表的主鍵到另一個(gè)表中作為外鍵來(lái) 體現(xiàn); (2) 1:N關(guān)系
3、將1表的主鍵在N表中以外鍵形式存在來(lái)體現(xiàn); (2)N:M關(guān)系采用關(guān)系表”來(lái)體現(xiàn),該關(guān)系表的主鍵是由相 關(guān)實(shí)體表的主鍵組成的符合主鍵,各實(shí)體表主鍵不但組成了該 關(guān)系表的主鍵,同時(shí)也被看作外鍵在該關(guān)系表中存在; (4)對(duì)于三個(gè)以上表之間的多元關(guān)系”常需要和反范式化冗 余字段結(jié)合起來(lái)設(shè)計(jì),以保證查詢速度; 1.3、范式化1NF的規(guī)范 原則 OLTP系統(tǒng)的模型,需要符合第二范式 衡量 對(duì)于表在20個(gè)以上的模型,需要數(shù)據(jù)組參與設(shè)計(jì) 方法 范式化要求: INF:列是訪問(wèn)的最小單位,具有原子性,不可再被分割; 實(shí)施 依據(jù)具體情況對(duì)相應(yīng)屬性進(jìn)行拆分或者合并。 范式化1NF常見(jiàn)現(xiàn)象: 現(xiàn)象一:同一個(gè)屬性值的不同
4、細(xì)度把握,比如,常見(jiàn)的“姓名”這個(gè)屬實(shí)施 性,設(shè)計(jì)一:“姓名”是一個(gè)列,設(shè)計(jì)二:“姓”是一個(gè)列,“名”是一個(gè)列, 兩個(gè)列的值組合起來(lái)才表達(dá)一個(gè)“姓名”語(yǔ)義。 兩種設(shè)計(jì)方法,在不同的系統(tǒng)中都有應(yīng)用, 這主要是依據(jù)需求的細(xì)度來(lái)確定, 靈活把握; 現(xiàn)象二:把多個(gè)屬性值錯(cuò)誤的作為一個(gè)屬性值存儲(chǔ),比如: 常見(jiàn)的OA系統(tǒng)要存儲(chǔ)員工的各種屬性,包括技能信息,技能范圍:Oracle,JAVA,.NET,C#,Perl,UNIX等等,一種常見(jiàn)的錯(cuò)誤設(shè)計(jì)是:設(shè)計(jì)一張員工表,其中有一個(gè)技能屬性字段,然后某員工所掌握的多種技能用逗號(hào)(,)間隔,然后將這個(gè)字符串存儲(chǔ)到這個(gè)員工表的技能屬性字段中.這里的錯(cuò)誤在 于將多個(gè)屬
5、性值作為一個(gè)屬性值存儲(chǔ)在一個(gè)字段中, 不能滿足直接遍歷員工對(duì)某個(gè)技能掌握情況, 而且如果再要求說(shuō)明員工對(duì)個(gè)技能的掌握程度(精通,熟悉,一般等等),則再 增加字段,里面的對(duì)應(yīng)關(guān)系將很容易錯(cuò)亂, 這是嚴(yán)重違反1NF的情況。正確的設(shè)計(jì)應(yīng)該是:兩個(gè)實(shí)體表:一張是員工表,一張是技能字典表,一個(gè)員工可以掌握多個(gè)技能,也就是(1:N)關(guān)系,相反一個(gè)技能可以被多個(gè)員工掌握,也是(1:N)關(guān)系,雙向都是(1:N)關(guān)系那么綜合起來(lái)員工和技能之間就是“多對(duì)多關(guān)系(N:M)”,依據(jù)前述規(guī)范,應(yīng)該設(shè)計(jì)一張“關(guān)系表”來(lái)存儲(chǔ)”多對(duì)多關(guān)系,主鍵為復(fù)合主鍵(員工主鍵+技能主鍵), 該關(guān)系有一個(gè)屬性“技能掌握程度” 1。4、范式
6、化2NF的規(guī)范 原則OLTP系統(tǒng)的模型,需要符合第三范式 衡量對(duì)于表在20個(gè)以上的模型,需要數(shù)據(jù)組參與設(shè)計(jì) 方法范式化要求: 2NF:滿足1NF,不存在非主鍵屬性對(duì)主鍵屬性的部分依賴; 實(shí)施范式化2NF常見(jiàn)現(xiàn)象: 實(shí)體表中一般不會(huì)出現(xiàn)違反2NF的情況,因?yàn)槎际恰耙粋€(gè)主鍵列,而關(guān)系表是兩個(gè)以上列的“復(fù)合”主鍵,故而關(guān)系表容易出現(xiàn)違反2NF的情況。主要是該關(guān)系表非主鍵外的屬性,本該屬于相關(guān)的某個(gè)實(shí)體表的,卻放到了該關(guān)系表中,這使得該屬性不能通過(guò)該關(guān)系表的復(fù)合主鍵唯一確定,DML操作 會(huì)發(fā)生錯(cuò)誤;如果違反了2NF,那么應(yīng)該把這個(gè)屬性從關(guān)系表中拆分,也許會(huì)單獨(dú)形成一個(gè)表, 絕大部分情況下是將該屬性歸并
7、到某個(gè)相關(guān)的實(shí)體表中; 違反2NF的例子:學(xué)生考試情況中,有兩個(gè)實(shí)體表:學(xué)生表和學(xué)科表,學(xué)生與學(xué)科之間的考試關(guān)系就是N:M的關(guān)系,就要?jiǎng)?chuàng)建一張關(guān)系表存儲(chǔ)該多對(duì)多的考試關(guān)系,表的主鍵為學(xué)生編號(hào)和學(xué)科編號(hào),屬性為考試分?jǐn)?shù);那么“任課老師”該放在那里呢飲口果放到考試關(guān)系表中,那么安排任課老師,必須先進(jìn)行考試,這顯然不符合實(shí)際,也就是任課老師不該依賴于學(xué) 生編號(hào)和學(xué)科編號(hào),只是依賴于學(xué)科編號(hào),也就是說(shuō)任課教 師信息應(yīng)該放在學(xué)科表中; 1.5、 范式化3NF的規(guī)范 原則 OLTP系統(tǒng)的模型,需要符合第三范式 衡量 對(duì)于表在20個(gè)以上的模型,需要數(shù)據(jù)組參與設(shè)計(jì) 方法 范式化3NF要求: 3NF:滿足2NF
8、,不存在非主鍵屬性對(duì)主鍵屬性的傳遞依賴; 實(shí)施 范式化3NF常見(jiàn)現(xiàn)象: 違反3NF的情況,絕大多數(shù)是在含有外鍵的表中;比如A表中的外鍵字段Bkey是B的主鍵,那么依賴于Bkey的屬性應(yīng)當(dāng)屬于B表的屬性,而不是A表,如果放入A表,則這些對(duì)A表的主鍵Akey的依賴,首先是依賴于A(BKey),而后通過(guò)A(BKey)對(duì)A(AKey)的依賴傳遞依賴于A(Akey);三種關(guān)系(1:1,1:N,N:M)都含有外鍵,都很可能發(fā)生違反3NF的情況。違反3NF的后果:會(huì)導(dǎo)致那些問(wèn)題屬性插入異常,或者被誤刪。 違反3NF的例子: 教師和學(xué)科之間,存在著上課關(guān)系,假設(shè)一個(gè)教師上一門(mén)課而 且一門(mén)課只有一個(gè)教師上,那么
9、該關(guān)系為1:1關(guān)系,將教師 表的主鍵教師編號(hào)在學(xué)科表中以外鍵形式存在就表達(dá)了該 1:1關(guān)系,那么教師的聯(lián)系電話”屬性該放哪里呢?如果看到 教師編號(hào)”出現(xiàn)在了學(xué)科表中,就將聯(lián)系電話放入學(xué)科表中,那么聯(lián)系電話首先是對(duì)表中的教師編號(hào)依賴,再依據(jù)教師編號(hào)對(duì)學(xué)科的依賴,達(dá)到了學(xué)科編號(hào)的依賴,那么聯(lián)系電話對(duì)學(xué)科編號(hào)的依賴就是傳遞依賴,違反了3NF,應(yīng)該將其從學(xué)科表中拆出來(lái)放入教師表中,不然的話,會(huì)發(fā)生操作異常, 比如, 假設(shè)一個(gè)教師已經(jīng)存在但是還沒(méi)有為其分配科目,那么他的電話就無(wú)法存入庫(kù)中. 1.6、 反范式化冗余字段使用規(guī)范 原則 OLTP系統(tǒng)中在完成范式化工作之后,對(duì)某些表,可以適當(dāng) 反范式化增加冗余
10、字段以提高數(shù)據(jù)訪問(wèn)性能;在OLAP中采 用的是面向問(wèn)題的設(shè)計(jì)思想,應(yīng)該大量使用反范式化冗余信息 衡量 當(dāng)SQL關(guān)連查詢涉及到4張表時(shí)可考慮采用冗余字段 方法 常用在兩個(gè)地方:(1)關(guān)系表中的冗余:在關(guān)系表中增加相關(guān)實(shí) 體表的相關(guān)屬性,以達(dá)到關(guān)連查詢時(shí)減少表的關(guān)聯(lián)數(shù)量的目 的(2)層次關(guān)系中的冗余:在多層次的子父表關(guān)系中,將父 表的屬性存儲(chǔ)在子表”或者孫子表”或者重孫表中; 反范式化冗余字段實(shí)例: (1)關(guān)系表中的冗余:比如在考試關(guān)系中,原本在學(xué)科表中 的學(xué)分信息,可以冗余添加到考試關(guān)系表中,這樣,每個(gè)學(xué)生 得了多少學(xué)分,就可以直接從考試表得到,而無(wú)需關(guān)聯(lián)學(xué)科 表來(lái)得到; (2)多層關(guān)系中的冗余
11、:假設(shè)為之范疇從大到小有國(guó)家表, 省份表,城市表,城區(qū)表,社區(qū)表,它們之間的層次關(guān)系是通 過(guò)上一級(jí)的主鍵在下一級(jí)中以外鍵形式存在來(lái)體現(xiàn)的,但是, 如果需要問(wèn):某個(gè)設(shè)計(jì)屬于哪個(gè)國(guó)家?這樣就要關(guān)連查詢所有的5張表,性能會(huì)很差,這時(shí)可以將國(guó)家編號(hào)以外鍵形式 放入到社區(qū)表中做冗余,這樣直接關(guān)聯(lián)國(guó)家表和社區(qū)表即可得到答案。一般的,每間隔一級(jí)增加一個(gè)冗余外鍵,比如將國(guó) 家編號(hào)放入城市表中,將城市編號(hào)放入社區(qū)表中 實(shí)施如何保證冗余字段數(shù)據(jù)的正確性(一致性)是反范式化的關(guān) 鍵,需要對(duì)冗余字段詳細(xì)添加注釋,說(shuō)明冗余了什么,以及該字段的維護(hù)方法,常用維護(hù)方法如下: (1)如果在程序開(kāi)發(fā)前設(shè)計(jì)的冗余字段,可以在正常
12、的業(yè)務(wù)邏輯程序中一并處理(2)如果是程序完成之后增加的冗余字段,可以使用觸發(fā)器維護(hù)(3)對(duì)于OLAP中大量存在冗余字段,可能需要使用單獨(dú)的處理任務(wù)進(jìn)行維護(hù) 1.7、 數(shù)據(jù)庫(kù)對(duì)象命名基本規(guī)范 第一:長(zhǎng)度規(guī)范:凡是需要命名的對(duì)象其標(biāo)識(shí)符均不能超過(guò)30個(gè) 字符,也即:Oracle中的表名、字段名,函數(shù)名,過(guò)程名,觸發(fā) 器名,序列名,視圖名的長(zhǎng)度均不能超過(guò)30個(gè)字符; 第二:構(gòu)成規(guī)范:數(shù)據(jù)庫(kù)各種名稱必須以字母開(kāi)頭,但嚴(yán)禁使用SYS開(kāi)頭;名稱只能含有字母,數(shù)字和下劃線“_三類字符,“_”用于間隔名稱中的各語(yǔ)義字段;不要使用DUAL作表名; 第三:大小寫(xiě)規(guī)范:構(gòu)成Oracle數(shù)據(jù)庫(kù)中的各種名稱(表明,字段
13、名,過(guò)程名,視圖名等等)的所有字符,必須使用大寫(xiě),也就是不能在腳本中,對(duì)任何名稱添加雙引號(hào)來(lái)設(shè)定字符的大小寫(xiě)形式, 只要不采用“限制,Oracle自動(dòng)會(huì)將各名稱轉(zhuǎn)化成大寫(xiě)。 2、表的設(shè)計(jì)規(guī)范 2.1、表的主鍵規(guī)范 遵循如下三點(diǎn)原則:第一:有無(wú)原則:除臨時(shí)表和外部表,以及流水表,日志表外,其他表都要建立主鍵;第二:構(gòu)成原則:主鍵不能使用含有實(shí)際語(yǔ)義的列,應(yīng)該增加一個(gè)xx_id字段做主鍵,類型為number,取值來(lái)自序列sequence第三:創(chuàng)建原則:對(duì)于500萬(wàn)以上的表,請(qǐng)數(shù)據(jù)組參與設(shè)計(jì)實(shí)施,采用先建唯一索引再添加主鍵約束的方式來(lái)創(chuàng)建主鍵; 2。2、表的主鍵列規(guī)范 對(duì)于實(shí)體表,主鍵就是一列,就是
14、沒(méi)有任何語(yǔ)義的自增的NUMBER歹L對(duì)于關(guān)系表,主鍵就是相關(guān)實(shí)體表主鍵形成的復(fù)合主鍵,是多列; 2.3、使用注釋的規(guī)范 原則每個(gè)表,每個(gè)字段都要有注釋,說(shuō)明其含義,對(duì)于冗余字段還 要特別說(shuō)明其維護(hù)方法,外鍵字段說(shuō)明參照與那個(gè)表 衡量原則上誰(shuí)設(shè)計(jì)誰(shuí)注釋 方法查詢字典表user_tab_comment矯口user_col_comments可知道表 和字段的注釋信息 實(shí)施對(duì)表添加注釋: SQLcommentontablecommentoncolumn。colnameisxx 2.4、一個(gè)表所含字段總長(zhǎng)度的規(guī)范 原則 一個(gè)表中的所有字段,應(yīng)當(dāng)能存儲(chǔ)在一個(gè)數(shù)據(jù)塊中(BLOCK), 也即:表的單行字段總長(zhǎng)
15、度db_block(減去pctfree) 衡量 對(duì)不含有大對(duì)象數(shù)據(jù)類型字段的表,字段數(shù)大于50個(gè)的,請(qǐng) 數(shù)據(jù)組參與設(shè)計(jì) 方法 查詢字典表USER_TAB_COLUMNS中的字段 DATA_LENGTH得到表中所有字段的總長(zhǎng)度,再依據(jù)db_block和表的pctfree參數(shù)可以判斷是否一個(gè)數(shù)據(jù)行可以存儲(chǔ)在一個(gè)數(shù)據(jù)塊(BLOCK)中 實(shí)施 如果所有字段的總長(zhǎng)度超出了一個(gè)數(shù)據(jù)塊,那么需要將該表拆 分成兩個(gè)(甚至多個(gè))表,拆分的依據(jù)是字段的頻繁使用程度, 也就是頻繁使用的字段在一個(gè)表中,很少被使用的字段放在另 一個(gè)表中他們之間使用相同的主鍵值,用主外鍵關(guān)聯(lián)。這點(diǎn)就 是“一個(gè)表所含字段訪問(wèn)頻繁度的規(guī)范”
16、 6.5、 一個(gè)表所含字段訪問(wèn)頻繁度的規(guī)范 原則 個(gè)表中的各字段的訪問(wèn)頻繁度應(yīng)該基本一致 衡量 如果一個(gè)表的字段數(shù)超過(guò)50個(gè),請(qǐng)數(shù)據(jù)組參與審核 方法 如果一個(gè)表的字段數(shù)過(guò)多超過(guò)50個(gè),并且依據(jù)業(yè)務(wù)邏輯確定 該表中一些字段頻繁被訪問(wèn),另一些字段則很少被訪問(wèn),則該 表需要做拆分處理,這在OLAP系統(tǒng)中比較常見(jiàn); 目的:這樣可以避免讀取頻繁信息時(shí)多讀取很少被訪問(wèn)的信息, 可以提高IO性能,減少內(nèi)存耗費(fèi); 實(shí)施 將訪問(wèn)頻繁度相差太遠(yuǎn)的字段拆分到兩個(gè)表中,一個(gè)表存頻繁 訪問(wèn)的字段,另一個(gè)表存很少被訪問(wèn)的字段; 2.6、一個(gè)表所含數(shù)據(jù)量的規(guī)范 原則 一個(gè)非分區(qū)表中的數(shù)據(jù)量不要超過(guò)500萬(wàn) 衡量 一個(gè)非分區(qū)
17、表中的數(shù)據(jù)量超過(guò)500萬(wàn),請(qǐng)數(shù)據(jù)組參與設(shè)計(jì)成分 區(qū)表,如果該表數(shù)據(jù)量超過(guò)5000萬(wàn),請(qǐng)DBA參與設(shè)計(jì) 方法 在系統(tǒng)上線前,通過(guò)對(duì)業(yè)務(wù)分析,判斷一個(gè)表的數(shù)據(jù)量;在系 統(tǒng)上線后,可以通過(guò)exp的日志,Top性能SQL,count(1)來(lái) 發(fā)現(xiàn)數(shù)據(jù)量大的表 實(shí)施 將這些表進(jìn)行分區(qū),具體方法請(qǐng)參看分區(qū)表的設(shè)計(jì)規(guī)范 2。7、大對(duì)象字段(BLOB,CLOB)使用規(guī)范 原則 存儲(chǔ)圖片視頻,音頻,文件,500字節(jié)以上文本等占用太多空間 的字段(大對(duì)象字段),不能和其他字段存儲(chǔ)在一個(gè)表中 衡量 含有大對(duì)象(BLOB,CLOB)字段的表設(shè)計(jì)和存儲(chǔ)請(qǐng)數(shù)據(jù)組參 與設(shè)計(jì) 方法 方法一:數(shù)據(jù)庫(kù)存儲(chǔ),可以重新建一個(gè)表專門(mén)存
18、儲(chǔ)該大對(duì)象字 段,該表基本為兩個(gè)字段,一個(gè)為大對(duì)象編號(hào)ID為主鍵,一個(gè) 為大對(duì)象內(nèi)容本身,并將該主鍵在原表中作外鍵關(guān)聯(lián),該大對(duì)象表存儲(chǔ)在單獨(dú)的表空間中;方法二:操作系統(tǒng)存儲(chǔ),將這些文件存儲(chǔ)在操作系統(tǒng)空間中,大對(duì)象字段存儲(chǔ)該文件的全路徑名比較:如果該大對(duì)象字段常被修改,那么采用方法一; 如果該大對(duì)象信息為靜態(tài),加載后基本不變,那么可以采用方法一,它有一個(gè)致命缺點(diǎn)就是信息存儲(chǔ)在數(shù)據(jù)庫(kù)外部,不安全, 容易丟失. 2。8、增量同步表的設(shè)計(jì)規(guī)范 字典信息表和需要使用增量同步的表必須增加如下屬性: 屬性名 取值 說(shuō)明 Status Char(1) Y/N:Y為激活 標(biāo)識(shí)該行是否使用。 N為作廢,默認(rèn) 為Y
19、 用于軟刪除,軟刪除 需將主鍵和唯一約 束列添加隨機(jī)數(shù)后 綴. Create_time Date 默認(rèn)為sysdate 創(chuàng)建時(shí)間 Update_time Date 默認(rèn)為sysdate 最后修改時(shí)間 2。9、表的表空間使用規(guī)范 原則 依據(jù)表的DML頻度而使用不同的表空間 衡量 表空間的規(guī)劃由建庫(kù)人員完成 方法 為了減少空間碎片問(wèn)題,(1)將很少被DML(增刪改)的靜態(tài)表,放在一組表空間中;(2)將只發(fā)生INSERT的表放到一組表空間中,(3)而將常發(fā)生兩種以上DML操作的動(dòng)態(tài)表放在另一組表空間中,這二組表空間不能相交 實(shí)施 在上線前,依據(jù)需求分析確定動(dòng)態(tài)表和靜態(tài)表,將他們做最分離;上線運(yùn)行之后
20、,依據(jù)數(shù)據(jù)庫(kù)性能分析得到的信息來(lái)區(qū)分動(dòng)態(tài)表和靜態(tài)表 2.10、索引的表空間使用規(guī)范 原則 表和索引原則上應(yīng)該使用不同的表空間存儲(chǔ),并且不同DML 頻度的表的索引,放在不同的表空間中 衡量表空間的規(guī)劃有數(shù)據(jù)組或者DBA實(shí)施 方法絕大多數(shù)情況下, 動(dòng)態(tài)表的索引必然是動(dòng)態(tài)的, 靜態(tài)表的索引必然是靜態(tài)的,依據(jù)對(duì)表的分析來(lái)確定索引的動(dòng)靜性 實(shí)施將動(dòng)態(tài)表的索引放在一組表空間中,靜態(tài)表的索引放在另一個(gè) 表空間中,兩組不相交。而且和表所在的表空間也不相交。 3、設(shè)計(jì)分區(qū)表的規(guī)范 3。1、RANGE分區(qū)的規(guī)范 原則 大數(shù)據(jù)量的表需進(jìn)行分區(qū)化 衡量 當(dāng)表的數(shù)據(jù)量超過(guò)500萬(wàn),請(qǐng)數(shù)據(jù)組參與設(shè)計(jì)成分區(qū)表,當(dāng) 表的數(shù)據(jù)
21、量超過(guò)5000萬(wàn),請(qǐng)DBA參與設(shè)計(jì) 方法 SQL常依據(jù)某列的范圍訪問(wèn)表,則對(duì)表使用RNAGE分區(qū), 常見(jiàn)情況是SQL根據(jù)時(shí)間范圍進(jìn)行查新,則使用時(shí)間字段作 為分區(qū)關(guān)鍵字進(jìn)行RANGE分區(qū); 將對(duì)表的多種訪問(wèn)結(jié)合考慮來(lái)確定分區(qū)的細(xì)度: 1.大多數(shù)SQL操作的分區(qū)關(guān)鍵字值的范圍; 2。數(shù)據(jù)維護(hù)的需要,比如以月為單位刪除歷史數(shù)據(jù); 3.數(shù)據(jù)訪問(wèn)的性能,以操作范圍確定的分區(qū)數(shù)據(jù)量還是過(guò)大, 比如大于500萬(wàn),則還需要進(jìn)行細(xì)分; 4。一個(gè)分區(qū)的數(shù)據(jù)量要小于500萬(wàn),這是一個(gè)硬性的尺度, 但從技術(shù)上來(lái)看,每個(gè)分區(qū)10萬(wàn)數(shù)據(jù)量的情況比每個(gè)分區(qū)20 萬(wàn)數(shù)據(jù)量的情況要快很多,所以需要靈活掌握; 實(shí)施1.當(dāng)各個(gè)分
22、區(qū)中的數(shù)據(jù)能均等劃分時(shí)性能最好,如果相差太 大,則考慮采用其它分區(qū),或者將大數(shù)據(jù)量的分區(qū)再進(jìn)行 HASH子分區(qū); 2。各分區(qū)采用各自的表空間存儲(chǔ),使用user_tab_partition行 典來(lái)查看確定每個(gè)分區(qū)的表空間位置; .分區(qū)表的索引采用本地索引,因?yàn)槌?huì)根據(jù)分區(qū)關(guān)鍵字(比 如時(shí)間)進(jìn)行分區(qū)維護(hù)(比如刪除1年前的數(shù)據(jù),也就是刪除 1年前的分區(qū)),分區(qū)維護(hù)時(shí)全局索引會(huì)失效,而本地索引不 會(huì)失效,這能保證訪問(wèn)表時(shí)索引正??捎茫?3。2、LIST分區(qū)的規(guī)范 原則 大數(shù)據(jù)量的表需進(jìn)行分區(qū)化 衡量 當(dāng)表的數(shù)據(jù)量超過(guò)500萬(wàn),請(qǐng)數(shù)據(jù)組參與設(shè)計(jì)成分區(qū)表,當(dāng) 表的數(shù)據(jù)量超過(guò)5000萬(wàn),請(qǐng)DBA參與設(shè)計(jì)
23、方法 SQL常居于某列的散列值訪問(wèn)表, 則對(duì)表使用LIST分區(qū),LIST分區(qū)不支持多列分區(qū)關(guān)鍵字;常見(jiàn)情況針對(duì)某個(gè)地區(qū)或者某個(gè)業(yè)務(wù)進(jìn)行數(shù)據(jù)訪問(wèn),那么就使用地區(qū)編號(hào)或者業(yè)務(wù)編號(hào)作為分區(qū)關(guān)鍵字; 將對(duì)表的多種訪問(wèn)結(jié)合考慮來(lái)確定分區(qū)的細(xì)度: 1。一般使用一個(gè)分區(qū)關(guān)鍵字的值來(lái)劃定一個(gè)分區(qū); 2??梢园逊謪^(qū)關(guān)鍵字的值相對(duì)應(yīng)數(shù)據(jù)比較少的幾個(gè)分區(qū)合并 作一個(gè)分區(qū); 3。如果一個(gè)分區(qū)關(guān)鍵字值所對(duì)應(yīng)的數(shù)據(jù)量過(guò)大,比如大于500 萬(wàn),則應(yīng)該對(duì)表采用RANGE分區(qū),對(duì)該值的分區(qū)再采用HASH 子分區(qū);也就是說(shuō),一個(gè)可以采用LIST分區(qū)的表,肯定可以轉(zhuǎn)化成RANGE分區(qū)(可帶子分區(qū)),反之不然; .一個(gè)分區(qū)的數(shù)據(jù)量要
24、小于500萬(wàn),這是一個(gè)硬性的尺度,但 從技術(shù)上來(lái)看,每個(gè)分區(qū)10萬(wàn)數(shù)據(jù)量分區(qū)方法比每個(gè)分區(qū)20 萬(wàn)數(shù)據(jù)量的分區(qū)方法要快很多,所以需要靈活掌握; 實(shí)施1.各分區(qū)采用各自的表空間存儲(chǔ),使用user_tab_partitions字典 來(lái)確定每個(gè)分區(qū)的表空間; 2。分區(qū)表的索引采用本地索引 3.3、HASH分區(qū)的規(guī)范 原則 大數(shù)據(jù)量的表需進(jìn)行分區(qū)化 衡量 當(dāng)表的數(shù)據(jù)量超過(guò)500萬(wàn),請(qǐng)數(shù)據(jù)組參與設(shè)計(jì)成分區(qū)表,當(dāng) 表的數(shù)據(jù)量超過(guò)5000萬(wàn),請(qǐng)DBA參與設(shè)計(jì) 方法 SQL訪問(wèn)表不按照某列的范圍進(jìn)行,也不按某列離散值進(jìn)行, 而且對(duì)該表的數(shù)據(jù)不會(huì)依據(jù)某列的值范圍或者離散值進(jìn)行定 期維護(hù),那么使用HASH分區(qū);H
25、ASH分區(qū)是不知道應(yīng)該選擇 何種分區(qū)時(shí)的選擇;HASH分區(qū)的各分區(qū)都可能存有各種情 況的數(shù)據(jù),故而不能用于依據(jù)分區(qū)清理數(shù)據(jù)的情況; 對(duì)確定分區(qū)細(xì)度的考慮: .依據(jù)分區(qū)的數(shù)據(jù)量規(guī)劃和表的最大數(shù)據(jù)量來(lái)確定分區(qū)數(shù); 2。一個(gè)分區(qū)的數(shù)據(jù)量要小于500萬(wàn),這是一個(gè)硬性的尺度, 但從技術(shù)上來(lái)看,每個(gè)分區(qū)10萬(wàn)數(shù)據(jù)量分區(qū)方法比每個(gè)分區(qū) 20萬(wàn)數(shù)據(jù)量的分區(qū)方法要快很多,所以需要靈活掌握; 實(shí)施1.各分區(qū)采用各自的表空間存儲(chǔ),使用user_tab_partitions字典 來(lái)確定每個(gè)分區(qū)的表空間; .對(duì)于HASH分區(qū)表,大多數(shù)情況下依然要求采用本地索引, 但是如果分區(qū)過(guò)細(xì),也可以采用全局索引,因?yàn)楦鶕?jù)HASH分
26、區(qū)表的特征(各分區(qū)無(wú)業(yè)務(wù)區(qū)分,都有數(shù)據(jù)),該表很少會(huì)發(fā)生 分區(qū)維護(hù)的工作; 3。4、RANGE-LIST分區(qū)的規(guī)范 原則 大數(shù)據(jù)量的表需進(jìn)行分區(qū)化 衡量 當(dāng)表的數(shù)據(jù)量超過(guò)500萬(wàn),請(qǐng)數(shù)據(jù)組參與設(shè)計(jì)成分區(qū)表,當(dāng)表 的數(shù)據(jù)量超過(guò)5000萬(wàn),請(qǐng)DBA參與設(shè)計(jì) 方法 SQL訪問(wèn)表時(shí), 既依據(jù)某列值的范圍, 又依據(jù)其他列的離散值或者范圍,這種情況下采用RANGE-LIST復(fù)合分區(qū),常用于 語(yǔ)表中的數(shù)據(jù)需要依據(jù)一個(gè)時(shí)間字段做周期性刪除等維護(hù), 并且正常業(yè)務(wù)SQL訪問(wèn)既依據(jù)時(shí)間字段,又依據(jù)其他字段的散列值進(jìn)行訪問(wèn)的情況; 比如:電信增值業(yè)務(wù)計(jì)費(fèi)表,既有時(shí)間又有業(yè)務(wù)屬性列,統(tǒng) 計(jì)的時(shí)候,會(huì)選擇時(shí)間范圍和業(yè)務(wù)屬
27、性,所以可以以時(shí)間列 為分區(qū)關(guān)鍵字建立RANGE分區(qū),以業(yè)務(wù)屬性列為關(guān)鍵字建立 LIST子分區(qū); 分區(qū)劃分的方法: .就按照大多數(shù)范圍訪問(wèn)的范圍值來(lái)劃定RANGE分區(qū)的范 圍,依據(jù)單個(gè)LIST子分區(qū)關(guān)鍵字的值來(lái)劃分子分區(qū); .如果LIST子分區(qū)中數(shù)據(jù)量較小而且又常被一起訪問(wèn)的子分區(qū)可以合并成一個(gè)子分區(qū); .如果LIST子分區(qū)中一個(gè)子分區(qū)關(guān)鍵字值對(duì)應(yīng)的子分區(qū)數(shù)據(jù) 量還是很大,超過(guò)500,影響性能,那么可以通過(guò)細(xì)分RANGE分區(qū)來(lái)達(dá)到減少LIST子分區(qū)數(shù)據(jù)量的目的,這點(diǎn)和LIST分區(qū)在該情況下的處理方法(轉(zhuǎn)化成RANGE-HASH)不同; 1。 各 子 分 區(qū) 應(yīng) 該 盡 量 分 散 到 不 同
28、的 表 空 間 中 存 儲(chǔ) , 使 用user_tab_subpartition殍典來(lái)確定每個(gè)子分區(qū)的表空間;2.RANGE-LIST大多數(shù)情況采用本地索引, 因?yàn)槌8鶕?jù)RANGE分區(qū)關(guān)鍵字的來(lái)進(jìn)行分區(qū)維護(hù); 3。5、RANGE-HASH分區(qū)的規(guī)范 實(shí)施 原則 大數(shù)據(jù)量的表需進(jìn)行分區(qū)化 衡量當(dāng)表的數(shù)據(jù)量超過(guò)500萬(wàn),請(qǐng)數(shù)據(jù)組參與設(shè)計(jì)成分區(qū)表,當(dāng)表的數(shù)據(jù)量超過(guò)5000萬(wàn),請(qǐng)DBA參與設(shè)計(jì) 方法SQL訪問(wèn)表時(shí), 主要依據(jù)某個(gè)列的范圍進(jìn)行訪問(wèn), 即訪問(wèn)特征符合RANGE分區(qū)的要求或者數(shù)據(jù)維護(hù)特征符合RANGE分區(qū)的要求,但是以SQL或者維護(hù)的數(shù)據(jù)范圍來(lái)劃定分區(qū),分區(qū)數(shù)據(jù)量又很大,對(duì)性能有影響,需再進(jìn)
29、行子分區(qū),由于分區(qū) 中的數(shù)據(jù)都會(huì)被訪問(wèn)到,所以子分區(qū)采用HASH方法,整個(gè) 表就是RANGE-HASH分區(qū);劃定分區(qū)的方法: 先按照大多數(shù)范圍訪問(wèn)的范圍值來(lái)劃定RANGE分區(qū)的范圍, 再依據(jù)性能情況來(lái)確定HASH子分區(qū)的數(shù)據(jù)量; 實(shí)施1。各子分區(qū)應(yīng)該盡量分散到不同的表空間中存儲(chǔ),使用 user_tab_subpartition殍 典 來(lái) 確 定 每 個(gè) 子 分 區(qū) 的 表 空 間 ;2。RANGE-HASH大多數(shù)情況采用本地索引,因?yàn)槌8鶕?jù) RANGE分區(qū)關(guān)鍵字的來(lái)進(jìn)行分區(qū)維護(hù); 4、索引的設(shè)計(jì)規(guī)范 4。1、主鍵索引的規(guī)范 原則 對(duì)數(shù)據(jù)量表應(yīng)該先在主鍵列建唯一索引,再建主鍵約束 衡量分區(qū)表的主
30、鍵必須采用該方法 方法主鍵上隱含索引,drop或disable主鍵時(shí),索引會(huì)丟失,為保 證性能不變,為了對(duì)主鍵約束和相應(yīng)索引有更多的控制,對(duì)大 表(分區(qū)表)的索引采用如下方式建立: (1)在準(zhǔn)備建主鍵的列上建立唯一索引(UNIQUEINDEX): CREATEUNIQUEINDEXIndex_NameON Table_Name(Column_Name)TABLESPACETBS_INDEX; (2)再加上主鍵約束: ALTERTABLETable_NameADD(PRIMARYKEY(Column_Name)USINGINDEXTABLESPACETBS_INDEX); Oracle會(huì)在指定的
31、列上加上主鍵約束,并且使用該索引 實(shí)施分區(qū)表的主鍵默認(rèn)索引是全局索引,所以主鍵索引的分區(qū)方法 先建立分區(qū)化的唯一索引,再建主鍵約束, 4.2、唯一約束索引的規(guī)范 原則 針對(duì)大數(shù)據(jù)量表應(yīng)該先在唯一約束列上建立普通索引,再添加 唯一性約束 衡量 分區(qū)表的唯一約束必須米用該方法 方法 刪除或禁用唯一性約束通常同時(shí)使相關(guān)聯(lián)的唯一索引失效,因 而降低了數(shù)據(jù)庫(kù)性能。要避免這樣問(wèn)題,可以采取卜面的步驟: (a)在唯一性約束的列上創(chuàng)建非唯一性索引(普通索引);(b) 添加唯一性約束 4。3、外鍵列索引的規(guī)范 原則 無(wú)論表的大小,外鍵列都要建立索引 原因 其一是為了子父表關(guān)聯(lián)查詢的性能考慮,其一是為了避免父子
32、表修改而發(fā)生死鎖 實(shí)施 普通表的外鍵列建立普通索引即可,如果表是分區(qū)表,則依據(jù) 表的情況建立本地索引或者全局索引 4。4、復(fù)合索引的規(guī)范 原則 復(fù)合索引只有在該種復(fù)合常被和該表相關(guān)的大多數(shù)SQL使用 時(shí)才建立 衡量 復(fù)合索引的列數(shù)不能超過(guò)3個(gè),否則該索引很少會(huì)被使用 實(shí)施 (1)復(fù)合索引的第一列, 可以通過(guò)不使用該種復(fù)合的SQL來(lái)確定。 假設(shè)一些SQL的WHERE中復(fù)合使用列為ABC,而其他一些SQL的WHERE中常使用的是C歹L那么該復(fù)合索引可以按照CAB的順序建立,這樣上述兩種SQL都能使用該索引;(2)對(duì)于不能把握好的復(fù)合索引,請(qǐng)?jiān)谶x擇性大的列上分別建立單列索引; (3)切忌不能將表相關(guān)
33、的所有SQL中WHERE涉及到的列復(fù) 合起來(lái)建立復(fù)合索引; 4。5、函數(shù)索引的規(guī)范 原則 由于使用形式需和創(chuàng)建形式一致,盡量避免使用函數(shù)索引 衡量 如果想要使用函數(shù)索引,請(qǐng)盡量進(jìn)行轉(zhuǎn)化 方法 由于函數(shù)索引在使用時(shí),使用形式必須和創(chuàng)建形式一致,故應(yīng)該 盡量避免使用函數(shù)索引,盡量采用如下方法轉(zhuǎn)化SQL以避免 函數(shù)索引的使用: 原本在WHERE中列上添加函數(shù)的,取函數(shù)的反意義函數(shù)添加到“切一側(cè)的常數(shù)項(xiàng)上,這樣只需要在列上建立普通索引即可,比如常見(jiàn)的日期轉(zhuǎn)化函數(shù): TO_CHAR(CREATE_TIME)=2010-0707采用TO_DATE ()轉(zhuǎn)化為CREATE_TIME=TO_DATE(2010
34、-07-07,yyyy mmdd,) 4。6、位圖索引的規(guī)范 原則 靜態(tài)表中的低基數(shù)列可以使用位圖索引 衡量 在事務(wù)型數(shù)據(jù)庫(kù)(OLTP)中禁止使用位圖(bitmap)索引,在報(bào) 表型數(shù)據(jù)庫(kù)(OLAP)中的靜態(tài)表,可以適當(dāng)使用; 方法 對(duì)于常發(fā)生DML操作的表,不能建立位圖索引,請(qǐng)建立普通 的索引即可,否則該表的相關(guān)操作很容易造成鎖等待,使系統(tǒng)性 能大受影響;其次,索引列需要低基數(shù),只有幾個(gè)數(shù)值,比如 性別列(男,女,保密)和學(xué)歷列(大專,本科,研究生博士生) 4。7、反向索引的規(guī)范 原則 列值順序增加的列,其上的WHERE運(yùn)算是或者=而不是 范圍(betweenand或者and)檢索時(shí),可以采
35、用反向函數(shù) 衡量 一倉(cāng)1建反向索弓1的歹U為NUMBER類型,值由SEQUENCE 生成 方法 實(shí)施 4。8、分區(qū)索引的規(guī)范 原則 對(duì)分區(qū)表的索引,需要做分區(qū)維護(hù)的,必須使用局部索引 衡量 一般情況下,HASH分區(qū)表可以采用全局索引,其他分區(qū),包 括RANGE-HASH也應(yīng)該采用本地索引,主要是由于HASH分 區(qū)表/、常進(jìn)行分區(qū)維護(hù); 方法 實(shí)施 4.9、索引重建的規(guī)范 原則 重建索引使用 ALTERINDEXREBUILDALTERINDEXREBUILD 方式,禁止米用 DROPINDEXDROPINDEX& &CREATEICREATEINDEXNDEX 方式; 衡量 分
36、區(qū)表等大數(shù)據(jù)量表的索引必須米用ALTERINDEX REBUILD方式重建 方法 ALTERINDEXIDX_NAMEREBUILDTABLESPACETBSP_NAME 實(shí)施 可以在現(xiàn)網(wǎng)上直接實(shí)施 5、SQL訪問(wèn)規(guī)范 5。1、避免SELECT* 程序中不能出現(xiàn)SELECT*,即使是選擇全部選擇項(xiàng),也需要全部指明,這主要出于如下原因:第一:使用*相對(duì)比較慢,因?yàn)镺racle需要遍歷更多的內(nèi)部字典信息;第二:為避免以后相關(guān)表增加字段造成程序錯(cuò)誤,比如INSERTINTOSELECT和SELECTINTO語(yǔ)句會(huì)報(bào)錯(cuò); 避免笛卡爾運(yùn)算 多表關(guān)聯(lián)查詢不能出現(xiàn)笛卡爾積,如果在報(bào)表中為集聚表(或稱中間表)
37、生成多個(gè)維度組成的復(fù)合主鍵需要使用迪克爾積的,必須請(qǐng)數(shù) 據(jù)組確認(rèn)性能。 使用CTAS備份 在進(jìn)行DML操作(INSERT,UPDATE,DELETE)之前,必須對(duì)數(shù) 據(jù)進(jìn)行備份,使用如下語(yǔ)句: 方法一:表數(shù)據(jù)全部備份: CREATETABLETAB_NAME_BAKASSELECT*FROMTAB_NAME; 方法二:部分備份:對(duì)大表僅備份將要修改的數(shù)據(jù): CREATETABLETAB_NAME_BAK ASSELECT*FROMTAB_NAMEWHERE選擇出被操作數(shù)據(jù)的條 件; INSERT時(shí)需寫(xiě)全列名 代碼中INSERT語(yǔ)句必須寫(xiě)出全部列名,以保證表增加字段后語(yǔ)句執(zhí)行不受影響: 如:IN
38、SERTINTOTAB(COL1,COL2)VALUES(COL1_VAL,COL2_VAL); 再如: INSERTINTOTAB(COL1,COL2) SELECTCOL1_VAL,COL2_VALFROMTAB_BB; 不能將COL1,COL2和COL1_VAL,COL2_VAL省略; 大數(shù)據(jù)量的DML DML操作涉及到大數(shù)據(jù)量時(shí),請(qǐng)分解為多次執(zhí)行; 對(duì)于UPDATE和DELETE每次涉及數(shù)據(jù)量在1萬(wàn)條左右, 并且每次執(zhí)行完就提交; 對(duì)于INSERTINTOSELECT如果采用提示(/*+appendparallel*/)可以處理百萬(wàn)級(jí)別的數(shù)據(jù)量。 完成事務(wù)及時(shí)commit 對(duì)于一個(gè)完成
39、了的事務(wù),請(qǐng)用commit顯示提交,這是避免鎖爭(zhēng)用的鎖 等待的需要特別是對(duì)DML操作頻繁的表; java的變量綁定 使用“變量綁定”來(lái)處理一條SQL帶不同常量多次執(zhí)行的情況, 動(dòng)態(tài)綁定可以大大優(yōu)化SQL的執(zhí)行效率,還可以優(yōu)化Oracle的內(nèi)存使用。 在 JavaJava 中,結(jié)合使用 setXXXsetXXX 系列方法,可以為不同數(shù)據(jù)類型的綁定變量進(jìn)行賦值,從而大大優(yōu)化了 SQLSQL 語(yǔ)句的性能。 JAVA情況下的動(dòng)態(tài)綁定示例如下: Stringv_id=xxxxx; Stringv_sql=selectnamefromtb_awhereid=?; stmt=con.prepareState
40、ment(v_sql); stmtosetString(1,v_id);/為綁定變量賦值 stmtoexecuteQueryQ; perl的變量綁定 使用“變量綁定”來(lái)處理一條SQL帶不同常量多次執(zhí)行的情況,動(dòng)態(tài) 綁定可以大大優(yōu)化SQL的執(zhí)行效率,還可以優(yōu)化Oracle的內(nèi)存使 用。 PERLPERL 綁定變量實(shí)例如下: $modsql=qq insertintotmp_tai_rtkpi_mark(tab_name, kpi_id, ne_id, timepoint, cacu_time,start_time,stop_time, down_base,up_base ajast_flag,i
41、nuse_flag,cal_data) I_values (?,?,?,?,?,?,?,?,?,? ; if(!$dbhprepare($modsqD) writeToLog(startSQLprepareError!/nDBI::errstr。/n/n); $sth_msg_in_DB=$dbh-prepare($modsql) |die(startSQLprepareError/n。$DBI::errstr。/n); $sth_msg_in_DBbind_param(1,$kpiid_tab$kpi_id); $sth_msg_in_DBbind_param(2,$kpi_id); $st
42、h_msg_in_DBbind_param(3,1); $sth_msg_in_DB-bind_param(4,1); $sth_msg_in_DBbind_param(5,$current_time); $sth_msg_in_DBbind_param(6,$start_time); $sth_msg_in_DBbind_param(7,$end_time); $sth_msg_in_DB-bind_param(8,$temp_min); $sth_msg_in_DB-bind_param(9,$temp_max); $sth_msg_in_DBbind_param(10,0); $sth_
43、msg_in_DB-bind_param(11,1); $sth_msg_in_DB-bind_param(12,-1); $sth_msg_in_DB-execute()|die(SQLExecuteError!/n。 $DBI:errstr./n); 避免重復(fù)訪問(wèn):使用group 避免重復(fù)訪問(wèn)(一):同源單組單查詢: 如下語(yǔ)句要避免: SELECTCLASS,sum(COL)FROMTAB_TESTWHERECLASS=AUNIONALLSELECTCLASS,sum(COL)FROMTAB_TESTWHERECLASS=BUNIONALL SELECTCLASS,sum(COL)FROM
44、TAB_TESTWHERECLASS=C改寫(xiě)成: SELECTCLASS,sum(COL)FROMTAB_TESTGROUPBYCLASS 5。10、避免重復(fù)訪問(wèn):豎向顯示變橫向現(xiàn)實(shí) 避免重復(fù)訪問(wèn)(二):豎向顯示變橫向顯示 問(wèn)題語(yǔ)句: SELECTA。C1AC1,A.C2AC2,A.C3AC3, BoC1BC1,B.C2BC2,B。C3BC3, CoC1CC1,CoC2CC2,C.C3CC3 FROM (SELECT123X,SYNONYMC1,sum(2)C2,count(1)C3 FROMTABWHERETABTYPE=SYNONYM)A,(SELECT123X,TABLEC1,sum(2
45、)C2,count(1)C3 FROMTABWHERETABTYPE=TABLE)B,(SELECT123X,VIEWC1,sum(2)C2,count(1)C3 FROMTABWHERETABTYPE=VIEW)C; 正確使用形式如下: SELECTMAX(DECODE(TABTYPE,SYNONYM,SYNONYM,NULL)AC1,MAX(DECODE(TABTYPE,SYNONYM,sum(2),0)AC2, MAX(DECODE(TABTYPE,SYNONYM,count(1),0)AC3, MAX(DECODE(TABTYPE,TABLE,TABLE,NULL)BC1, MAX(D
46、ECODE(TABTYPE:TABLE,sum(2),0)BC2, MAX(DECODE(TABTYPE,TABLE,count(1),0)BC3, MAX(DECODE(TABTYPE,VIEW:VIEW,NULL)CC1, MAX(DECODE(TABTYPE,VIEW,sum(2),0)CC2, MAX(DECODE(TABTYPE,VIEW,count(1),0)CC3 FROMTAB WHERETABTYPEIN(TABLE;SYNONYM,VIEWGROUPBYTABTYPE; 5。11、避免重復(fù)訪問(wèn):用表更新表 避免重復(fù)訪問(wèn)(三):一個(gè)表同時(shí)更新另一個(gè)表的多個(gè)字段 問(wèn)題SQL:使用TB_SOURCE表更新表TB_TARGET的多個(gè)字段 UPDATETB_TARGETASET A.COL1=(selectB.COL1fromTB_SOURCEBwhereB。id=A.id), A.COL2=(selectB。COL2fromTB_SOURCEBwhereB。id=A。id), A。COL3=(selectB.COL3fromTB_SOURCEBwhereB。id
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年食堂炊事員應(yīng)急管理與服務(wù)合同范本3篇
- 2025年蟹塘養(yǎng)殖基地承包與品牌授權(quán)協(xié)議3篇
- 二零二五版美容院美容設(shè)備研發(fā)與技術(shù)支持采購(gòu)合同4篇
- 2025年高速公路停車場(chǎng)租賃及旅游導(dǎo)覽服務(wù)合同3篇
- 2025年星巴克綠色環(huán)保包裝材料采購(gòu)合同2篇
- 二零二五年度面包磚生產(chǎn)設(shè)備租賃合同4篇
- 2025年度采礦權(quán)出讓合同范本:礦業(yè)權(quán)收益分配機(jī)制3篇
- 2025年度特色菜品研發(fā)廚師合作合同4篇
- 2025版吸糞車租賃合同范本(含保險(xiǎn)條款)3篇
- 2025版售樓部裝修工程防水防潮合同3篇
- 湖北省黃石市陽(yáng)新縣2024-2025學(xué)年八年級(jí)上學(xué)期數(shù)學(xué)期末考試題 含答案
- 硝化棉是天然纖維素硝化棉制造行業(yè)分析報(bào)告
- 央視網(wǎng)2025亞冬會(huì)營(yíng)銷方案
- 《無(wú)砟軌道施工與組織》 課件 第十講雙塊式無(wú)砟軌道施工工藝
- 江蘇省南京市、鹽城市2023-2024學(xué)年高三上學(xué)期期末調(diào)研測(cè)試+英語(yǔ)+ 含答案
- 2024新版《藥品管理法》培訓(xùn)課件
- 《阻燃材料與技術(shù)》課件 第7講 阻燃橡膠材料
- 爆炸物運(yùn)輸安全保障方案
- 江蘇省南京市2025屆高三學(xué)業(yè)水平調(diào)研考試數(shù)學(xué)試卷(解析版)
- 鉗工考試題及參考答案
- 移動(dòng)商務(wù)內(nèi)容運(yùn)營(yíng)(吳洪貴)任務(wù)五 引發(fā)用戶共鳴外部條件的把控
評(píng)論
0/150
提交評(píng)論