摘要:本文介紹宜信105條數(shù)據(jù)庫軍規(guī),,幫助研發(fā)團(tuán)隊(duì)評(píng)估數(shù)據(jù)庫開發(fā)質(zhì)量,,達(dá)到盡早發(fā)現(xiàn)問題解決問題的目標(biāo)。 作為一家金融科技企業(yè),,宜信的大量業(yè)務(wù)都依賴于數(shù)據(jù)庫,。如何提高公司整體數(shù)據(jù)庫應(yīng)用水平,是對(duì)DBA的一大挑戰(zhàn),,也非常具有現(xiàn)實(shí)意義,。筆者在宜信的多年工作中,與團(tuán)隊(duì)一起總結(jié)整理了針對(duì)傳統(tǒng)關(guān)系型數(shù)據(jù)庫的使用規(guī)則,,并借助自研的數(shù)據(jù)庫審核平臺(tái)落地,,借此幫助研發(fā)團(tuán)隊(duì)評(píng)估數(shù)據(jù)庫開發(fā)質(zhì)量,達(dá)到盡早發(fā)現(xiàn)問題,、解決問題之目的,。下圖正是這一系統(tǒng)的簡(jiǎn)單原理圖。 如上圖所示,,針對(duì)規(guī)則部分又可細(xì)分為如下分類(部分),。簡(jiǎn)單描述如下,后面將逐一詳細(xì)說明,。 一,、Oracle規(guī)則(對(duì)象) 1.1 表、分區(qū) 【規(guī)則1】 規(guī)則說明:超過指定規(guī)模且沒有分區(qū)的表,。 規(guī)則閾值:2GB(物理大小超過指定閥值),。 規(guī)則描述:表的規(guī)模過大,將影響表的訪問效率、增加維護(hù)成本等,。常見的解決方案就是使用分區(qū)表,,將大表轉(zhuǎn)換為分區(qū)表。 【規(guī)則2】 規(guī)則說明:?jiǎn)伪砘騿畏謪^(qū)記錄數(shù)量過大,。 規(guī)則閾值:1000000(單表或單分區(qū)記錄數(shù)超過指定閥值),。 規(guī)則描述:控制單個(gè)表或單個(gè)分區(qū)的數(shù)據(jù)規(guī)模,提高單一對(duì)象的訪問效率,。如記錄數(shù)過多,,應(yīng)考慮分庫、分表,、分區(qū)等策略,。 【規(guī)則3】 規(guī)則說明:大表過多。 規(guī)則閾值:自定義(超過2G的表的數(shù)量過多),。 規(guī)則描述:大表在所有表中所占比例超過20%(OLTP)或95%(OLAP),。 【規(guī)則4】 規(guī)則說明:?jiǎn)伪矸謪^(qū)數(shù)量過多。 規(guī)則閾值:500(單表分區(qū)數(shù)量超過指定閥值),。 規(guī)則描述:分區(qū)表中分區(qū)數(shù)量過多,,將導(dǎo)致整體維護(hù)成本過高,可調(diào)整分區(qū)粒度,。 【規(guī)則5】 規(guī)則說明:分區(qū)表數(shù)量過多,。 規(guī)則閾值:2000(分區(qū)表數(shù)量超過指定閥值),。 規(guī)則描述:分區(qū)表過多,,常見原因是大表較多。因根據(jù)需求,,考慮進(jìn)行垂直拆分,,減小單庫規(guī)模。 【規(guī)則6】 規(guī)則說明:復(fù)合分區(qū)數(shù)量過多,。 規(guī)則閾值:5(復(fù)合分區(qū)數(shù)量超過指定閥值),。 規(guī)則描述:同上面分區(qū)表數(shù)量過多理由類似(含有復(fù)合分區(qū)表的數(shù)量)。 【規(guī)則7】 規(guī)則說明:存在啟用并行屬性的表,。 規(guī)則閾值:1(表degree屬性不為1),。 規(guī)則描述:一般情況下不建議對(duì)表設(shè)置并行屬性。 1.2 索引 【規(guī)則8】 規(guī)則說明:外鍵沒有索引的表,。 規(guī)則描述:外鍵沒有索引會(huì)導(dǎo)致主子表關(guān)聯(lián)查詢時(shí),,關(guān)聯(lián)效率很低。 【規(guī)則9】 規(guī)則說明:組合索引數(shù)量過多或沒有索引,。 規(guī)則描述:組合索引過多,,將導(dǎo)致空間消耗較大、索引維護(hù)成本較高。應(yīng)考慮構(gòu)建戰(zhàn)略性索引結(jié)構(gòu),,不要針對(duì)每個(gè)需求都通過創(chuàng)建索引解決,。 【規(guī)則10】 規(guī)則說明:?jiǎn)伪硭饕龜?shù)量過多。 規(guī)則閾值:3(單表索引數(shù)量超過指定閥值),。 規(guī)則描述:索引可以提高訪問速度,,但數(shù)量過多將導(dǎo)致空間消耗過大,且索引維護(hù)成本較高,,影響DML效率等問題,。應(yīng)控制索引數(shù)量。 【規(guī)則11】 規(guī)則說明:存在7天內(nèi)沒有使用的索引,。 規(guī)則描述:在數(shù)據(jù)庫一段時(shí)間內(nèi),,該索引沒有被任何SQL語句使用。請(qǐng)?jiān)u估此索引的有效性,。 【規(guī)則12】 規(guī)則說明:字段重復(fù)索引,。 規(guī)則描述:一個(gè)字段被多個(gè)索引引用,請(qǐng)考慮構(gòu)建策略,,刪除不必要的索引,。 【規(guī)則13】 規(guī)則說明:存在全局分區(qū)索引。 規(guī)則描述:全局分區(qū)索引,,存在維護(hù)成本較高問題,。當(dāng)分區(qū)發(fā)生變化時(shí),需要維護(hù)全局索引的有效性,。 【規(guī)則14】 規(guī)則說明:失效索引,。 規(guī)則描述:索引狀態(tài)為INVALID、UNUSABLE,。 【規(guī)則15】 規(guī)則說明:索引高度超過指定高度,。 規(guī)則閾值:4。 規(guī)則描述:索引高度過高導(dǎo)致增加IO成本,。 【規(guī)則16】 規(guī)則說明:存在位圖索引,。 規(guī)則描述:OLTP環(huán)境中不建議使用位圖索引,如果表對(duì)象經(jīng)查做DML操作,,會(huì)在一定程度上阻塞相關(guān)操作,。 【規(guī)則17】 規(guī)則說明:存在函數(shù)索引。 【規(guī)則18】 規(guī)則說明:存在啟用并行屬性的索引,。 規(guī)則閾值:1(索引degree屬性不為1),。 規(guī)則描述:一般情況下不建議對(duì)索引設(shè)置并行屬性。 【規(guī)則19】 規(guī)則說明:存在聚簇因子過大的索引,。 規(guī)則閾值:自定義,。 規(guī)則描述:聚簇因子過大的索引,應(yīng)該考慮優(yōu)化。 1.3 約束 【規(guī)則20】 規(guī)則類別:約束,。 規(guī)則說明:沒有主鍵的表,。 規(guī)則描述:主鍵是關(guān)系型數(shù)據(jù)庫中唯一確定一條記錄的依據(jù),沒有任何理由不定義主鍵,。 【規(guī)則21】 規(guī)則類別:約束,。 規(guī)則說明:使用外鍵的表。 規(guī)則描述:不建議使用外鍵約束,,數(shù)據(jù)一致性通過應(yīng)用端解決,。 1.4 字段 【規(guī)則22】 規(guī)則說明:表字段過多。 規(guī)則閾值:100(字段數(shù)量超過指定閥值),。 規(guī)則描述:字段過多,,會(huì)導(dǎo)致記錄長度過大。單個(gè)數(shù)據(jù)存儲(chǔ)單元將保存的記錄數(shù)過少,,影響訪問效率,。 【規(guī)則23】 規(guī)則說明:包含有大字段類型的表。 規(guī)則描述:大對(duì)象字段是關(guān)系型數(shù)據(jù)庫中應(yīng)盡量避免的,。如有需要,,可考慮在外部進(jìn)行存儲(chǔ)。 【規(guī)則24】 規(guī)則說明:記錄長度定義過長,。 規(guī)則描述:記錄定義長度與實(shí)際存儲(chǔ)長度差異過大,,請(qǐng)考慮字段類型定義是否合理,個(gè)別字段過長是否可分表存儲(chǔ),。 【規(guī)則25】 規(guī)則說明:不包含時(shí)間戳字段的表,。 規(guī)則描述:時(shí)間戳,是獲取增量數(shù)據(jù)的一種方法,。建議在表內(nèi)增加創(chuàng)建時(shí)間,、更新時(shí)間的時(shí)間戳字段。命名方式為CREATE_TIME,、UPDATE_TIME。 【規(guī)則26】 規(guī)則說明:表字段類型不匹配,。 規(guī)則描述:此規(guī)則會(huì)抽樣部分?jǐn)?shù)據(jù),,分析其定義類型與存儲(chǔ)類型是否相符。常見問題如用數(shù)字,、文本保存日期等,。 1.5 其他對(duì)象 【規(guī)則27】 規(guī)則說明:緩存過小的序列。 規(guī)則閾值:100(序列cache值小于指定閥值),。 規(guī)則描述:系統(tǒng)默認(rèn)會(huì)緩存20,,如過小將導(dǎo)致頻繁查詢數(shù)據(jù)字典,影響并發(fā)能力。 【規(guī)則28】 規(guī)則說明:存在存儲(chǔ)過程及函數(shù)度,。 規(guī)則閾值:20(存儲(chǔ)過程和函數(shù)的數(shù)量超過指定閥值),。 規(guī)則描述:存儲(chǔ)過程及函數(shù),將影響數(shù)據(jù)庫的異構(gòu)遷移能力,,并存在代碼維護(hù)性較差等原因,。 【規(guī)則29】 規(guī)則說明:存在觸發(fā)器。 規(guī)則閾值:20(觸發(fā)器數(shù)量超過指定閥值),。 規(guī)則描述:觸發(fā)器,,將影響數(shù)據(jù)庫的異構(gòu)遷移能力。如有數(shù)據(jù)一致性維護(hù)需求,,請(qǐng)從應(yīng)用端給予考慮,。 【規(guī)則30】 規(guī)則說明:存在DBLINK。 規(guī)則描述:不建議在一個(gè)數(shù)據(jù)庫中訪問其他數(shù)據(jù)庫,,請(qǐng)考慮在應(yīng)用端解決,。 二、Oracle規(guī)則(執(zhí)行計(jì)劃) 2.1 綁定變量 【規(guī)則31】 規(guī)則說明:未使用綁定變量,。 規(guī)則閾值:自定義(執(zhí)行次數(shù)),。 規(guī)則描述:執(zhí)行次數(shù)超過一定閥值的語句,謂詞右側(cè)存在常量值,。 【規(guī)則32】 規(guī)則說明:綁定變量的數(shù)量過多,。 規(guī)則閾值:自定義(綁定變量的個(gè)數(shù))。 規(guī)則描述:綁定變量數(shù)量過多會(huì)增加變量替換時(shí)間,,在一定程度上增加sql執(zhí)行時(shí)間,。 2.2 表間關(guān)聯(lián) 【規(guī)則33】 規(guī)則說明:笛卡爾積。 規(guī)則描述:缺少連接條件,,導(dǎo)致表間關(guān)聯(lián)使用了笛卡爾積的連接方式,,執(zhí)行計(jì)劃中包含"CARTESIAN|"字樣。 【規(guī)則34】 規(guī)則說明:嵌套循環(huán)層次過深,。 規(guī)則閾值:自定義(層次數(shù)),。 規(guī)則描述:嵌套循環(huán)層次過深,超過指定閥值,。執(zhí)行計(jì)劃中嵌套多層"NESTED LOOP"或"FILTER"字樣,。 【規(guī)則35】 規(guī)則說明:嵌套循環(huán)內(nèi)層表訪問方式為全表掃描。 規(guī)則描述:嵌套循環(huán)的內(nèi)層表訪問方式為全表掃描,,效率很低,。 【規(guī)則36】 規(guī)則說明:排序合并連接中存在大結(jié)果集排序。 規(guī)則描述:排序合并中兩個(gè)結(jié)果集都要排序,,應(yīng)調(diào)整為其他連接方式,。 【規(guī)則37】 規(guī)則說明:多表關(guān)聯(lián),。 規(guī)則閾值:自定義(表個(gè)數(shù))。 規(guī)則描述:過多的表關(guān)聯(lián),,影響性能,。 2.3 訪問路徑 【規(guī)則38】 規(guī)則說明:大表全表掃描。 規(guī)則閾值:自定義(表大小,,單位GB),。 規(guī)則描述:對(duì)大表執(zhí)行了全表掃描操作,執(zhí)行計(jì)劃中包含"TABLE ACCESS FULL"字樣,。 【規(guī)則39】 規(guī)則說明:大索引全掃描,。 規(guī)則閾值:自定義(索引大小,單位GB),。 規(guī)則描述:對(duì)大索引執(zhí)行了索引全掃描操作,,執(zhí)行計(jì)劃中包含"INDEX FULL SCAN"字樣。 【規(guī)則40】 規(guī)則說明:大索引快速全掃描,。 規(guī)則閾值:自定義(索引大小,,單位GB)。 規(guī)則描述:對(duì)大索引執(zhí)行了索引快速全掃描操作,,執(zhí)行計(jì)劃中包含"INDEX FAST FULL SCAN"字樣,。 【規(guī)則41】 規(guī)則說明:索引跳躍掃描。 規(guī)則描述:對(duì)索引執(zhí)行跳躍掃描操作,,執(zhí)行計(jì)劃中包含"INDEX SKIP SCAN"字樣,。 【規(guī)則42】 規(guī)則說明:分區(qū)全掃描。 規(guī)則描述:對(duì)分區(qū)表進(jìn)行了全分區(qū)掃描,,執(zhí)行計(jì)劃中含有“PARTITION RANGE ALL”字樣,。 【規(guī)則43】 規(guī)則說明:非連續(xù)分區(qū)掃描。 規(guī)則描述:非連續(xù)分區(qū)掃描,,執(zhí)行計(jì)劃中含有“PARTITION RANGE INLIST”或“PARTITION RANGE OR”字樣,。 【規(guī)則44】 規(guī)則說明:跨分區(qū)掃描。 規(guī)則描述:連續(xù)的分區(qū)掃描,,執(zhí)行計(jì)劃中含有“PARTITION RANGE ITERATOR”字樣,。 2.4 類型轉(zhuǎn)換 【規(guī)則45】 規(guī)則說明:存在隱式轉(zhuǎn)換。 規(guī)則描述:在條件判斷中使用了隱式數(shù)據(jù)類型轉(zhuǎn)換,。 2.5 其他執(zhí)行計(jì)劃 【規(guī)則46】 規(guī)則說明:存在大結(jié)果集排序操作,。 規(guī)則描述:可考慮通過引入索引等操作避免排序。 【規(guī)則47】 規(guī)則說明:存在并行訪問特征,。 規(guī)則描述:并行很影響性能,一般情況下需要避免,。 【規(guī)則48】 規(guī)則說明:存在視圖訪問,。 規(guī)則描述:視圖操作一般可以合并,、解嵌套等,如都不行應(yīng)該排查視圖定義,。 三,、Oracle規(guī)則(執(zhí)行特征) 3.1 執(zhí)行特征 【規(guī)則49】 規(guī)則說明:掃描塊數(shù)與返回記錄數(shù)比例過低。 規(guī)則閾值:自定義(百分比),。 規(guī)則描述:掃描大量數(shù)據(jù)但返回記錄數(shù)很少,,需要從邏輯上調(diào)整SQL語句。 【規(guī)則50】 規(guī)則說明:子游標(biāo)過多,。 規(guī)則閾值:自定義(子游標(biāo)數(shù)),。 規(guī)則描述:子游標(biāo)過多,可能存在執(zhí)行計(jì)劃不穩(wěn)定的情況,。 【規(guī)則51】 規(guī)則說明:elapsed_time,。 規(guī)則閾值:自定義。 【規(guī)則52】 規(guī)則說明:cpu_time 規(guī)則閾值:自定義 【規(guī)則53】 規(guī)則說明:buffer_gets 規(guī)則閾值:自定義 【規(guī)則54】 規(guī)則說明:disk_reads 規(guī)則閾值:自定義 【規(guī)則55】 規(guī)則說明:direct_writes 規(guī)則閾值:自定義 【規(guī)則56】 規(guī)則說明:executions 規(guī)則閾值:自定義 四,、MySQL規(guī)則(對(duì)象) 4.1 表,、分區(qū) 【規(guī)則57】 規(guī)則說明:超過指定規(guī)模且沒有分區(qū)的表。 規(guī)則閾值:自定義(表大小,,GB),。 規(guī)則描述:表的規(guī)模過大,將影響表的訪問效率,、增加維護(hù)成本等,。常見的解決方案就是使用分區(qū)表,將大表轉(zhuǎn)換為分區(qū)表,。 【規(guī)則58】 規(guī)則說明:?jiǎn)螏鞌?shù)據(jù)表過多,。 規(guī)則閾值:自定義(表個(gè)數(shù))。 規(guī)則描述:?jiǎn)螏鞌?shù)據(jù)表過多,,將影響整體性能,。必要時(shí),進(jìn)行業(yè)務(wù)邏輯的垂直拆分,。 【規(guī)則59】 規(guī)則說明:?jiǎn)伪?分區(qū))數(shù)據(jù)量過大,。 規(guī)則閾值:自定義(數(shù)據(jù)規(guī)模,記錄數(shù)),。 規(guī)則描述:?jiǎn)伪?分區(qū))數(shù)據(jù)表過多,,將影響整體性能。必要時(shí),,進(jìn)行分庫,、分表或定期清理、歸檔數(shù)據(jù),。 4.2 索引 【規(guī)則60】 規(guī)則說明:?jiǎn)伪硭饕龜?shù)量過多,。 規(guī)則閾值:自定義(索引數(shù)量),。 規(guī)則描述:?jiǎn)伪硭饕龜?shù)量過多,不僅維護(hù)成本高,,而且占用更多的空間,。 【規(guī)則61】 規(guī)則說明:存在重復(fù)索引。 規(guī)則描述:索引能由另一個(gè)包含該前綴的索引完全代替,,是多余索引,。多余的索引會(huì)浪費(fèi)存儲(chǔ)空間,并影響數(shù)據(jù)更新性能,。 【規(guī)則62】 規(guī)則說明:索引選擇率不高,。 規(guī)則閾值:自定義(選擇率,百分比),。 規(guī)則描述:索引選擇率不高,,將導(dǎo)致索引低效,請(qǐng)調(diào)整索引字段,。 4.3 約束 【規(guī)則63】 規(guī)則說明:表存在外鍵,。 規(guī)則描述:外鍵資源將消耗數(shù)據(jù)庫的計(jì)算能力,建議通過應(yīng)用層保證數(shù)據(jù)約束,。 【規(guī)則64】 規(guī)則說明:表沒有定義主鍵,。 規(guī)則描述:沒有定義主鍵,MySQL會(huì)自動(dòng)創(chuàng)建主鍵,。這不是一種好的設(shè)計(jì)方法,。 4.4 字段 【規(guī)則65】 規(guī)則說明:存在大對(duì)象字段。 規(guī)則描述:大對(duì)象字段將影響存取性能,、耗費(fèi)較多空間,,建議在數(shù)據(jù)庫之外存儲(chǔ)。 【規(guī)則66】 規(guī)則說明:?jiǎn)伪碜侄螖?shù)過多,。 規(guī)則閾值:自定義(字段數(shù)),。 規(guī)則描述:表字段數(shù)過多,將造成記錄過長,,單頁存儲(chǔ)記錄數(shù)減少,。可考慮拆表處理,。 【規(guī)則67】 規(guī)則說明:?jiǎn)伪碜侄味x長度過長,。 規(guī)則閾值:自定義(字段長度,單位字節(jié)),。 規(guī)則描述:應(yīng)控制單表定義長度,,避免過長記錄。 【規(guī)則68】 規(guī)則說明:?jiǎn)伪碇麈I字段定義長度過長,。 規(guī)則閾值:自定義(字段長度,,單位字節(jié)),。 規(guī)則描述:應(yīng)控制主鍵字段長度,,過長的主鍵字段會(huì)造成索引空間消耗過大,。 【規(guī)則69】 規(guī)則說明:表沒有定義時(shí)間戳字段。 規(guī)則描述:時(shí)間戳字段是獲取增量數(shù)據(jù)的最佳方法,,請(qǐng)為表定義時(shí)間戳字段,。 【規(guī)則70】 規(guī)則說明:字段數(shù)據(jù)類型定義錯(cuò)誤。 規(guī)則閾值:自定義(記錄數(shù)),。 規(guī)則描述:根據(jù)字段保存內(nèi)容判斷,,字段類型定義異常,建議選擇適合的數(shù)據(jù)類型,。 4.5 其他對(duì)象 【規(guī)則71】 規(guī)則說明:?jiǎn)伪泶嬖诤瘮?shù),、存儲(chǔ)過程、觸發(fā)器,。 規(guī)則描述:存儲(chǔ)過程,、函數(shù)、觸發(fā)器等都將消耗數(shù)據(jù)庫的計(jì)算能力,,建議通過應(yīng)用層保證數(shù)據(jù)約束,。 五、MySQL規(guī)則(執(zhí)行計(jì)劃) 5.1 訪問路徑 【規(guī)則72】 規(guī)則說明:大表全表掃描,。 規(guī)則閾值:自定義(表大小,,單位GB)。 規(guī)則描述:對(duì)大表執(zhí)行了全表掃描操作,。 5.2 SELECT_TYPE 【規(guī)則73】 規(guī)則說明:DEPENDENT UNION 【規(guī)則74】 規(guī)則說明:SUBQUERY 【規(guī)則75】 規(guī)則說明:DEPENDENT SUBQUERY 【規(guī)則76】 規(guī)則說明:MATERIALIZED 【規(guī)則77】 規(guī)則說明:UNCACHEABLE SUBQUERY 【規(guī)則78】 規(guī)則說明:UNCACHEABLE UNION 5.3 ACCESS_TYPE 【規(guī)則79】 規(guī)則說明:fulltext 【規(guī)則80】 規(guī)則說明:index_merge 【規(guī)則81】 規(guī)則說明:unique_subquery 【規(guī)則82】 規(guī)則說明:all 【規(guī)則83】 規(guī)則說明:index range 5.4 其他執(zhí)行計(jì)劃 【規(guī)則84】 規(guī)則說明:使用臨時(shí)表,。 規(guī)則描述:執(zhí)行過程中使用了臨時(shí)表,執(zhí)行計(jì)劃中包括"using temporary",。 【規(guī)則85】 規(guī)則說明:使用磁盤排序,。 規(guī)則描述:執(zhí)行計(jì)劃中使用了磁盤排序,執(zhí)行計(jì)劃中包含"using filesort"字樣,。 六,、MySQL規(guī)則(執(zhí)行特征) 6.1 執(zhí)行特征 【規(guī)則86】 規(guī)則說明:index_ratio 【規(guī)則87】 規(guī)則說明:lock_time_sum 七、Oracle+MySQL(語句級(jí)) 7.1 查詢類 【規(guī)則88】 規(guī)則說明:select * 規(guī)則描述:禁止使用select *,,必須明確選擇所需的列,。 【規(guī)則89】 規(guī)則說明:重復(fù)查詢子句。 規(guī)則描述:禁止使用重復(fù)的查詢子句,,應(yīng)使用with as替換子句(僅限Oracle)來提升SQL執(zhí)行效率,。 【規(guī)則90】 規(guī)則說明:查詢字段引用函數(shù)。 規(guī)則描述:禁止在查詢字段中引用函數(shù)(類型轉(zhuǎn)換函數(shù),、函數(shù)索引情況可忽略),。 【規(guī)則91】 規(guī)則說明:嵌套select子句,。 規(guī)則描述:禁止出現(xiàn)select子句的嵌套子查詢,避免出現(xiàn)性能問題,。 【規(guī)則92】 規(guī)則說明:出現(xiàn)union,。 規(guī)則描述:防止出現(xiàn)不必要的排序動(dòng)作。 【規(guī)則93】 規(guī)則說明:多個(gè)過濾條件通過or連接,。 規(guī)則描述:防止優(yōu)化器出現(xiàn)選擇異常,。 【規(guī)則94】 規(guī)則說明:謂詞條件使用like '%xxx' 規(guī)則描述:無法使用索引。 【規(guī)則95】 規(guī)則說明:謂詞中存在負(fù)向操作符,。 規(guī)則描述:!=,<>,!<,!>,not exists,not,。 【規(guī)則96】 規(guī)則說明:存在子查詢情況。 規(guī)則描述:這個(gè)要區(qū)分位置(select,、from,、where、having等部分),。 【規(guī)則97】 規(guī)則說明:存在三個(gè)以上的表關(guān)聯(lián),。 【規(guī)則98】 規(guī)則說明:存在全連接或外連接。 規(guī)則描述:cross join或outer join情況,。 7.2 變更類 【規(guī)則99】 規(guī)則說明:update中出現(xiàn)order by子句,。 規(guī)則描述:防止更新過程中出現(xiàn)不必要的排序。 【規(guī)則100】 規(guī)則說明:update中必須出現(xiàn)where子句,。 規(guī)則描述:防止出現(xiàn)意外的全部更新動(dòng)作,。 【規(guī)則101】 規(guī)則說明:更新主鍵。 規(guī)則描述:禁止出現(xiàn)更新主鍵的情況,。 【規(guī)則102】 規(guī)則說明:delete中出現(xiàn)order by子句,。 規(guī)則描述:防止刪除過程出現(xiàn)不必要的排序。 【規(guī)則103】 規(guī)則說明:delete中必須出現(xiàn)where子句,。 規(guī)則描述:防止出現(xiàn)意外的全部刪除動(dòng)作,。 【規(guī)則104】 規(guī)則說明:新增SQL文本過長規(guī)則。 【規(guī)則105】 規(guī)則說明:新增IN List元素過多,。
|
|