日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 36条军规_mysql开发36条军规(转)

發(fā)布時間:2024/1/23 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 36条军规_mysql开发36条军规(转) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

(一)核心軍規(guī)

(1)不在數(shù)據(jù)庫做運(yùn)算

cpu計(jì)算務(wù)必移至業(yè)務(wù)層;

(2)控制單表數(shù)據(jù)量

int型不超過1000w,含char則不超過500w;

合理分表;

限制單庫表數(shù)量在300以內(nèi);

(3)控制列數(shù)量

字段少而精,字段數(shù)建議在20以內(nèi);

(4)平衡范式與冗余

效率優(yōu)先;

往往犧牲范式;

(5)拒絕3B

拒絕大sql語句:big sql

拒絕大事物:big transaction

拒絕大批量:big batch

(二)字段類軍規(guī)

(6)用好數(shù)值類型

tinyint(1Byte)

smallint(2Byte)

mediumint(3Byte)

int(4Byte)

bigint(8Byte)

bad case:int(1)/int(11)

(7)字符轉(zhuǎn)化為數(shù)字

用int而不是char(15)存儲ip

(8)優(yōu)先使用enum或set

例如:`sex` enum (‘F’, ‘M’)

(9)避免使用NULL字段

NULL字段很難查詢優(yōu)化;

NULL字段的索引需要額外空間;

NULL字段的復(fù)合索引無效;

bad case:

`name` char(32) default null

`age` int not null

good case:

`age` int not null default 0

(10)少用text/blob

varchar的性能會比text高很多;

實(shí)在避免不了blob,請拆表;

(11)不在數(shù)據(jù)庫里存圖片

這個我不能理解!

但這是趕集網(wǎng)的經(jīng)驗(yàn),求detail!

(三)索引類軍規(guī)

(12)謹(jǐn)慎合理使用索引

改善查詢、減慢更新;

索引一定不是越多越好(能不加就不加,要加的一定得加);

覆蓋記錄條數(shù)過多不適合建索引,例如“性別”;

(13)字符字段必須建前綴索引

(14)不在索引做列運(yùn)算

!!!不只是索引,都不能做列運(yùn)算吧!!!

bad case:

select id where age +1 = 10;

(15)innodb主鍵推薦使用自增列;

主鍵建立聚簇索引;

主鍵不應(yīng)該被修改;

字符串不應(yīng)該做主鍵;

如果不指定主鍵,innodb會使用唯一且非空值索引代替;

(16)不用外鍵

請由程序保證約束;

(四)sql類軍規(guī)

(17)sql語句盡可能簡單

一條sql只能在一個cpu運(yùn)算;

大語句拆小語句,減少鎖時間;

一條大sql可以堵死整個庫;

(18)簡單的事務(wù)

事務(wù)時間盡可能短;

bad case:

上傳圖片事務(wù)

(19)避免使用trig/func

觸發(fā)器、函數(shù)不用;

客戶端程序取而代之;

(20)不用select *

消耗cpu,io,內(nèi)存,帶寬;

這種程序不具有擴(kuò)展性;

(21)OR改寫為IN()

or的效率是n級別;

in的消息時log(n)級別;

in的個數(shù)建議控制在200以內(nèi);

select id from t where phone=’159′ or phone=’136′;

=>

select id from t where phone in (’159′, ’136′);

(22)OR改寫為UNION

mysql的索引合并很弱智

select id from t where phone = ’159′ or name = ‘john’;

=>

select id from t where phone=’159′

union

select id from t where name=’jonh’

(23)避免負(fù)向%

(24)慎用count(*)

(25)同上

(26)limit高效分頁

limit越大,效率越低

select id from t limit 10000, 10;

=>

select id from t where id > 10000 limit 10;

(27)使用union all替代union

union有去重開銷

(28)少用連接join

(29)使用group by

分組;

自動排序;

(30)請使用同類型比較

(31)使用load data導(dǎo)數(shù)據(jù)

load data比insert快約20倍;

(32)打散批量更新

(33)性能分析工具

show profile;

mysqlsla;

mysqldumpslow;

explain;

show slow log;

show processlist;

show query_response_time(percona);

總結(jié)

以上是生活随笔為你收集整理的mysql 36条军规_mysql开发36条军规(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。