drop table if exists `dictionary`;
create table `dictionary` (
`id` bigint(8) not null auto_increment comment '主鍵',
`create_at` bigint(8) default 0 comment '建立時間',
`create_by` bigint(8) default 0 comment '建立人id',
`create_name` varchar(32) default '' comment '建立人名稱',
`update_at` bigint(8) default 0 comment '更新時間',
`update_by` bigint(8) default 0 comment '更新人id',
`update_name` varchar(32) default '' comment '更新人名稱',
`is_del` tinyint(1) default 0 comment '是否刪除',
`is_test` tinyint(1) default 0 comment '是否測試',
primary key (`id`)
) engine=innodb auto_increment=1 default charset=utf8mb4 collate=utf8mb4_unicode_ci comment='字典';
複製**
不在資料庫做運算:cpu計算務必移至業務層;
控制單錶資料量:含int型不超過1000w,含char則不超過500w;合理分表;限制單庫表數量在300以內;
控制列數量:字段數控制在20以內;
平衡正規化與冗餘:為提高效率犧牲正規化設計,冗餘資料;
拒絕3b:拒絕大sql,大事務,大批量;
用好數值型別
tinyint(1byte)smallint(2byte)
mediumint(3byte)
int(4byte)
bigint(8byte)
**bad case:**int(1)/int(11)
字元轉化為數字
用int而不是char(15)儲存ip
優先使用enum或set
例如:***
enum (『f』, 『m』)
避免使用null欄位
null欄位很難查詢優化null欄位的索引需要額外空間
null欄位的復合索引無效
bad case:
name
char(32) default null
age
int not nullgood case:
age
int not null default 0
少用text/blob
varchar的效能會比text高很多實在避免不了blob,請拆表
不在資料庫裡存
謹慎合理使用索引
改善查詢、減慢更新索引一定不是越多越好(能不加就不加,要加的一定得加)
覆蓋記錄條數過多不適合建索引,例如「性別」
字元字段必須建字首索引
不在索引做列運算
bad case:select id where age +1 = 10;
innodb主鍵推薦使用自增列
主鍵建立聚簇索引主鍵不應該被修改
字串不應該做主鍵
如果不指定主鍵,innodb會使用唯一且非空值索引代替
不用外來鍵
請由程式保證約束
sql語句盡可能簡單
一條sql只能在乙個cpu運算大語句拆小語句,減少鎖時間
一條大sql可以堵死整個庫
簡單的事務
事務時間盡可能短bad case:
上傳事務
避免使用trig/func
觸發器、函式不用客戶端程式取而代之
不用select *
消耗cpu,io,記憶體,頻寬這種程式不具有擴充套件性
or改寫為in()
or的效率是n級別in的效率是log(n)級別
in的個數建議控制在200以內
select id from t where phone=』159′ or phone=』136′;
改寫成:
select id from t where phone in (』159′, 』136′);
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』
避免負向%
慎用count(*)
limit高效分頁
limit越大,效率越低select id from t limit 10000, 10;
改寫成:
select id from t where id > 10000 limit 10;
使用union all替代union
union有去重開銷
少用連線join
使用group by
分組自動排序
請使用同型別比較
使用load data導資料
load data比insert快約20倍;
打散批量更新
效能分析工具
show profile;mysqlsla;
mysqldumpslow;
explain;
show slow log;
show processlist;
show query_response_time(percona)
資料庫建表設計規範
mysql 的字符集支援涉及兩個方面 字符集 character set 和排序方式 collection 對字符集的支援可以細化到四個層次 伺服器 server 資料庫 database 資料表 table 連線 connection 連線mysql 可通過如下命令檢視字符集的詳情 對資料庫的命名...
資料庫設計規範
使用明確 統一的標明和列名,例如 school,schoolcourse,courceid。資料表名使用單數而不是複數,例如 studentcourse,而不是studentcourses。資料表名不要使用空格。資料表名不要使用不必要的字首或者字尾,例如使用school,而不是tblschool,或...
資料庫設計規範
csm簡寫會方便很多 就不要用member id,一致性方便大家理解 system.currenttimemillis 進行儲存text查詢是會產生臨時磁碟檔案,效能差進行擷取儲存型別 占用位元組 範圍tinyint 1 128 127 smallint 2 32768 32767 mediumin...