成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

MySQL設(shè)計(jì)規(guī)范(續(xù))

1.1    數(shù)據(jù)庫字段設(shè)計(jì)規(guī)范

優(yōu)先選擇符合存儲(chǔ)需要的最小的數(shù)據(jù)類型

南皮ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

對(duì)于非負(fù)數(shù)據(jù)采用無符號(hào)整型進(jìn)行存儲(chǔ);

varchar(N)中N代表字符數(shù),不是字節(jié)數(shù)(Oracle中是字節(jié)數(shù),如中文GBK下2字節(jié)存一個(gè)漢字),即MySQL中varchar(2)可存儲(chǔ)2個(gè)漢字,占用6個(gè)字節(jié)(UTF8)。

避免使用text,blob數(shù)據(jù)類型:

常見的text類型可存儲(chǔ)64k,一般是使用不到這么大空間;

非要使用,建議把blob或text列分離到單獨(dú)的擴(kuò)展表中,且避免使用select *;

text, blob僅能使用前綴索引,且默認(rèn)情況下text,blob列均不能有默認(rèn)值。

避免使用ENUM數(shù)據(jù)類型

修改ENUM值需要alter語句;

ENUM類型的ORDER BY操作效率低,需要額外操作;

禁止使用數(shù)值作為ENUM的枚舉值。

盡可能把所有列定義為NOTNULL:

索引NULL列需占用額外的空間來保存(是否為空),所以占用更多空間;

比較和計(jì)算對(duì)NULL做特別處理,可能索引會(huì)失效。

使用TIMESTAMP或DATETIME類型存儲(chǔ)時(shí)間:

TIMESTAMP 1970-01-01~2038-01-19,占用4字節(jié)和INT存儲(chǔ)相同;

其他范圍使用DATETIME類型存儲(chǔ)。

金融財(cái)務(wù)相關(guān)類數(shù)據(jù),使用DECIMAL類型:

占用空間有定義的寬度決定;

可用于存儲(chǔ)比bigint更大的整數(shù)數(shù)據(jù)。

1.2    數(shù)據(jù)庫SQL開發(fā)規(guī)范

建議使用預(yù)編譯語句進(jìn)行數(shù)據(jù)庫操作:

只傳參數(shù),比傳遞SQL語句更高效;

相同語句可以一次解析,多次使用,提高處理效率。

避免數(shù)據(jù)類型的隱式轉(zhuǎn)換

隱式轉(zhuǎn)換可能導(dǎo)致索引失效。

充分利用表上已存在的索引

避免使用雙%的查詢條件,如’123%’可使用索引;

一個(gè)SQL只能使用聯(lián)合索引一列進(jìn)行范圍查詢;

PS:index(a, b, c),where a = xxand b > low and b < high可使用到b列的索引,

         wherea > low and a < high and b = xx,b這列使用不到索引;

         這個(gè)處理和oracle的聯(lián)合索引是一致的。

使用left join或not exists來優(yōu)化not in操作。

禁止跨庫查詢:

程序連接不同數(shù)據(jù)庫使用不同的賬號(hào);

為數(shù)據(jù)庫遷移和分庫分表留出余地;

降低業(yè)務(wù)的耦合度;

避免權(quán)限過大產(chǎn)生的安全風(fēng)險(xiǎn),SQL注入也只能看到一個(gè)庫。

禁止使用Select *

消耗過多的CPU, IO, 網(wǎng)絡(luò)資源;

無法使用覆蓋索引;

可減少表結(jié)構(gòu)變更帶來的影響。

禁止使用不含字段列表的INSERT

INSERT INTO T(A, B) VALUES(…….);

可減少表結(jié)構(gòu)變更帶來的影響。

盡量避免使用子查詢,可以把子查詢優(yōu)化為join操作:

當(dāng)然并不是所有的子查詢都能轉(zhuǎn)換為join,如group by等得子查詢;

通常是IN子查詢這樣的語句。

子查詢結(jié)果集無法使用索引;子查詢會(huì)產(chǎn)生臨時(shí)表操作,如果子查詢數(shù)據(jù)量大將嚴(yán)重影響效率;消耗過多的CPU、IO。

避免使用JOIN關(guān)聯(lián)太多的表:

每Join一個(gè)表多占用一部分內(nèi)存(join_buffer_size);

會(huì)產(chǎn)生臨時(shí)表操作,影響查詢效率;

MySQL最多允許關(guān)聯(lián)61個(gè)表,建議不超過5個(gè)。

減少同數(shù)據(jù)庫的交互次數(shù):

數(shù)據(jù)庫更適合做批量操作;

合并多個(gè)相同的操作到一起;

PS:如alter table t addcolumn c1 int, change column c2 c2 int…

使用in代替or:

in的值不要超過500個(gè);

in操作可以有效的利用索引。

禁止使用order byrand()進(jìn)行隨機(jī)排序:

會(huì)把表中所有滿足條件的數(shù)據(jù)裝載到內(nèi)存中進(jìn)行排序;

消耗大量的CPU/IO/MEM;

處理方式:推薦在程序中獲取一個(gè)隨機(jī)值,然后在數(shù)據(jù)庫中獲取數(shù)據(jù)的方式(親認(rèn)為開發(fā)人員愿意去實(shí)現(xiàn)多余的算法嗎?都希望一句SQL返回結(jié)果集)。

WHERE從句禁止對(duì)列進(jìn)行函數(shù)轉(zhuǎn)換和計(jì)算:

where date(createtime) = ‘20171010’ à where createtime >= ‘20171010’ and createtime < ‘20171011’

UNIONALL OR UNION:

這兩種排序方式和Oracle的完全一致,UNION ALL不排序,UNION排序。

拆分復(fù)雜SQL為多個(gè)小SQL

MySQL一個(gè)SQL只能使用一個(gè)CPU進(jìn)行計(jì)算;

SQL拆分后可以通過并行查詢提高處理效率。

1.3    數(shù)據(jù)庫操作行為規(guī)范

超過100W行數(shù)據(jù)批量DML操作,要分批多次進(jìn)行操作

需考慮主從延遲;

binlog日志為row格式產(chǎn)生大量日志;

避免大事務(wù)的操作,阻塞并行。

大表表結(jié)構(gòu)修改

推薦使用pt-online-schema-change修改表結(jié)構(gòu);

可避免大表修改產(chǎn)生的主動(dòng)延遲;

避免在對(duì)表字段修改時(shí)進(jìn)行鎖表。

禁止為程序賬號(hào)賦予super權(quán)限:

當(dāng)達(dá)到最大連接數(shù)限制時(shí),還允許使用一個(gè)帶有super權(quán)限的用戶連接;

super權(quán)限只能留給DBA處理問題的賬號(hào)使用。

對(duì)程序賬號(hào),遵循權(quán)限最小的原則:

程序在使用數(shù)據(jù)庫賬號(hào)只能在一個(gè)DB下使用,不允許跨庫使用;

程序賬號(hào)原則上不允許有drop權(quán)限。

當(dāng)前文章:MySQL設(shè)計(jì)規(guī)范(續(xù))
URL鏈接:http://jinyejixie.com/article30/ggsppo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、自適應(yīng)網(wǎng)站、網(wǎng)站維護(hù)App設(shè)計(jì)、網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營
来凤县| 遂昌县| 忻州市| 吉安县| 鲜城| 商城县| 积石山| 平陆县| 南陵县| 将乐县| 金溪县| 连城县| 汪清县| 安达市| 天峻县| 巫山县| 亳州市| 延边| 台江县| 威海市| 麻阳| 星子县| 麻栗坡县| 汉源县| 盘山县| 雷山县| 教育| 宁波市| 济宁市| 沙坪坝区| 资讯 | 遂川县| 民和| 天水市| 岳阳市| 舟曲县| 灯塔市| 渝北区| 堆龙德庆县| 凭祥市| 喜德县|