mysql 存储过程月单拆天单_为部门整理的mysql_db使用军规
mysql_db使用軍規(guī):
1、禁止開發(fā)測(cè)試人員在IDC環(huán)境手工刪除和修改數(shù)據(jù)
2、所有需求通過(guò)DB工具系統(tǒng)提交
3、禁止在IDC環(huán)境DB進(jìn)行測(cè)試
4、IDC環(huán)境提交的sql語(yǔ)句一定要經(jīng)過(guò)非正式環(huán)境驗(yàn)證,且經(jīng)過(guò)"explain sql;"檢驗(yàn)過(guò)執(zhí)行計(jì)劃有走索引
5、IDC環(huán)境庫(kù)表創(chuàng)建統(tǒng)一用小寫,庫(kù)表用英文簡(jiǎn)稱,力求精簡(jiǎn)
6、禁止web機(jī)器直連DB
7、每條記錄要保存數(shù)據(jù)的創(chuàng)建和修改時(shí)間,表通常要有主鍵,使用innodb引擎
8、IDC環(huán)境db只授權(quán)增查改,刪除權(quán)限D(zhuǎn)BA評(píng)估
9、預(yù)估和控制單表的數(shù)據(jù)量在百萬(wàn)以內(nèi),數(shù)據(jù)量過(guò)大需清理或分表
10、IDC環(huán)境禁止使用mysql視圖,存儲(chǔ)過(guò)程,觸發(fā)器,自定義函數(shù)
一、表的一句話優(yōu)化
1.???int型不超過(guò)1000w,含char則不超過(guò)500w
數(shù)字和字符裝不下的情況,考慮多字段。
2.???按時(shí)間分表,按主鍵取模/hash分表,按量分表
紅包是按量來(lái)的。
3.???限制單庫(kù)表的數(shù)量在萬(wàn)級(jí)以內(nèi)
4.???拒絕text和blob類型
實(shí)在避免不了要用text和blob類型,拆表吧。或者弄成本地保存,多機(jī)器分片存儲(chǔ)。
5.???分區(qū)的算法可以按時(shí)間
比如天、月,便于針對(duì)性的查詢,命中率100%
二、字段的一句話優(yōu)化
1長(zhǎng)度可以冗余,可適量10%左右
tinyint(1Byte)smallint(2Byte)mediumint(3Byte)int(4Byte)bigint(8Byte)認(rèn)清長(zhǎng)度,選擇好類型。
2你認(rèn)識(shí)null嗎?
避免使用NULL字段,因?yàn)镹ULL字段很難查詢優(yōu)化;NULL字段的索引需要額外空間;NULL字段的復(fù)合索引無(wú)效。
錯(cuò)誤的例子:`Fpacket_name` char(32) default null。
正確的例子:`Fpacket_name` varchar(60) NOT NULL DEFAULT ''。
`Fface_value` int(10) unsigned NOT NULLDEFAULT '0'。"
3業(yè)務(wù)上有關(guān)聯(lián)的字段,要定義相同類型
相同的類型做語(yǔ)句操作有助于提高操作效率,減少轉(zhuǎn)換成本。
4選擇類型請(qǐng)用數(shù)字、枚舉
數(shù)字表示意思的,來(lái)替代字符串。
正確的例子:性別,0男,1女;時(shí)間用時(shí)間戳的數(shù)字形式;IP用數(shù)字型等等。
三、語(yǔ)句的一句話優(yōu)化
1?????利用explain神器來(lái)優(yōu)化語(yǔ)句利弊
Type結(jié)果集:顯示連接使用了何種類型。從最好到最差的連接類型為const、eq_reg、ref、range、index和all。
2?????Truncate比delete要快
Delete計(jì)數(shù)器不清零,按行刪,慢。Truncate相當(dāng)于刪掉重建,最快。批量刪除最好導(dǎo)出有用數(shù)據(jù),然后刪掉舊表,新表重命名。
3?????用join代替子查詢
Join原理,nested loop。Left Join數(shù)據(jù)量小的在前面,Straight_JOIN。
4?????自帶函數(shù)運(yùn)算
不要讓MYSQL用自己函數(shù),他已經(jīng)很累,盡量在程序內(nèi)實(shí)現(xiàn),比如now(),放到程序里取到了再傳入給mysql處理。更不要在mysql去處理大邏輯運(yùn)算。
5?????要知道一條語(yǔ)句是依賴一個(gè)CPU內(nèi)核的
一條語(yǔ)句一個(gè)內(nèi)核,大語(yǔ)句可以拆開多語(yǔ)句,多核機(jī)共用,還可以減少mysql鎖時(shí)間。
6?????不要select *
除非你查詢的所有字段都要用到。。。。否則你占用這么多內(nèi)存,寬帶,CPU時(shí)間,IO干鳥蛋。
7?????如果能用in,就不要用or
or的時(shí)間復(fù)雜度是n,in的時(shí)間復(fù)雜度是log(n)。
錯(cuò)誤的例子:select Fpacket_name from t_account_packet where Fpacket_id =68698080 or Fpacket_id = 68711068;
正確的例子:select Fpacket_name from t_account_packet where Fpacket_id in(68698080,68711068);"
8?????如果能用union,就不要用or
和上邊同理
9?????合理使用limit
拍拍數(shù)據(jù)一般都是自增的,所以定位的話一般都要倒序來(lái)看最近時(shí)間的。但limit又是最慢的一個(gè)倒序合理結(jié)合limit的話,能體現(xiàn)出更高的效率。
最近的2個(gè)批次,正確的例子:select Fpacket_id from t_account_packet order by Fpacket_id desclimit 2;
錯(cuò)誤的思路:select count(*) from t_account_packet ; =>879446;
selectFpacket_id from t_account_packet limit 879444,879446;
最近的第2個(gè)批次,正確的例子:selectFpacket_id from t_account_packet order by Fpacket_id desc limit 1,1;"
錯(cuò)誤的思路:select count(*) from t_account_packet ; =>879446;
selectFpacket_id from t_account_packet limit 879444,879445;
10? 如果能用load data,就不要用insert
做幸運(yùn)占卜師活動(dòng)的時(shí)候,默認(rèn)是要載入很多血型和性格相關(guān)數(shù)據(jù)的。當(dāng)時(shí)用的是source+逐行insert方法導(dǎo)數(shù)據(jù),或者考慮load data,它的原理是在執(zhí)行l(wèi)oad之前,會(huì)關(guān)掉索引,當(dāng)load全部執(zhí)行完成后,再重新創(chuàng)建索引。而insert的原理是:每插入一條則更新一次數(shù)據(jù)庫(kù),更新一次索引。所以要慢很多倍,具體多少倍,依賴待處理的數(shù)量級(jí)。
四、索引的一句話優(yōu)化
1.???盡量選擇區(qū)分度高的索引進(jìn)行檢索
錯(cuò)誤的例子:name。正確的例子:id。
2.???不易過(guò)多
表數(shù)據(jù)與索引的容量比保持在1:1,至少一條語(yǔ)句中存在一個(gè)索引。
3.???索引是從左向右原則
4.???利用explain神器來(lái)執(zhí)行和分析索引的覆蓋
5.???不要用索引字段做計(jì)算
你見(jiàn)過(guò)哪個(gè)應(yīng)急通道上,有自駕車站位的?
6.???要認(rèn)識(shí)他們MyISAM(重搜索), Innodb(默認(rèn),事務(wù)性、重業(yè)務(wù))
innodb主鍵推薦使用自增列
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的mysql 存储过程月单拆天单_为部门整理的mysql_db使用军规的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java类如何enum_java – 如
- 下一篇: java泛型机制的好处_java 泛型机