(27)MySQL 简要规范

一、表规范

1、表、字段名,小写字母, “_”分割, 不需简写,长度< 32个字符    xx_test

2、禁⽤关键字, 如desc、code、name,反例:select name, code from table;正:select table_name, table_code from table

3、临时/备份库、表前缀tmp/bak,后缀日期:create table bak/temp_table_20210109...

4、禁用外键新增、更新、删除,影响性能

5、建表必备字段: id、create_at、update_atid 必为主键,类型为unsigned bigint、单表时自增、步长为1;create_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP;

update_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

6、主键索引默认PrimaryKey, 自定义pk_字段名;唯一uniq_;普通索引名idx_:pk_id、idx_code、uniq_code

7、【建议】创建表时, 根据业务需求添加版本号字段用于进行并发控制`version bigint(20) NOT NULL COMMENT '版本号',

8、【建议】存在删除场景时, 添加删除标示字段, 禁止物理删除

二、字段规范

1、日期用datetime
timestamp:1) 只到2038年, 设置默认值 0000-00-00 00:00:00, 2)  mybatis映射会报错, jdbcurl后加zeroDateTimeBehavior=convertToNull

2、小数用decimal,或缩放存为int/long。禁用 float 和 double

3、索引字段禁止为NULL,设置默认值(NULL,索引无法优化)

4、建议将TEXT、BLOB类型字段拆到单独表中(大字段影响查询性能)

三、索引规范

1、唯一特性字段,建唯一索引 ( 业务单据号、基础数据编码等)

2、组合索引,区分度最高放前

    如:where c>? and d=? 即使 c 区分度高:idx_d_c

    同一create_time量级非常小:KEY `status_create_time_index` (`status`,`create_time`)

3、单表索引数 < 5个, 单索引中字段<5个

4、ORDER BY、GROUP BY、DISTINCT利用索引先天顺序避免排序(否则会消耗大量磁盘IO)

联合索引建立如下 a_b_c:

select order_id from ORDER where。a = 'xxx' and。b > 'xxx' order by c;  命中a_b,c要额外排序

select order_id from ORDER where a = 'xxx' and b = 'xxx' order by c;    命中 a_b_c

5、左匹配原则

select * from myTest  where a=3 and b=5 and c=4

select * from myTest  where  c=4 and b=6 and a=3;    where里面的条件顺序在查询之前会被mysql自动优化,效果跟上一句一样

6、like 'test%'。禁用like '%abc'、like '%abc%' 会让索引失效

7、不在低基数列上建索引,如“性别”

例1:  create_time的区分度低,可以把后面两个索引合为一个

        KEY `create_status_index` (`create_time`,`status`) COMMENT '创建时间和状态索引'
        KEY `status_index` (`status`)

        合并为:KEY `create_status_index` (`status`, create_time) COMMENT '创建状态和时间的索引',

例2:order_id 的区分度低,不应该再order_id的后面再增加联合索引,所以前两个索引可以合为一个索引

四、SQL 使用规范

1、尽量不用<if>,没法判断是否可以命中索引,没法做索引的优化(表中数量比较少或者update不强制,搜索逻辑用es

2、where禁止sql引用(不能一眼看出sql语义)

3、禁用大事务(事务有其他的IO操作、SQL数量过多,导致事务耗时长)

4、新增查询SQL要执行计划,访问类型type:至少range 级别,要求ref,consts 最好。禁止all/index

    1.consts:单表中最多只有一行匹配,在优化阶段即可读取到数据:select id, number from T where number=10 // number唯一索引 

    2.ref :普通索引:select id, name from T where name='a' // name普通索引

    3.range:对索引进行范围检索:select id, age from T where age in (1,2,4)

    explain type级别参考:https://blog.csdn.net/dennis211/article/details/78170079

5、禁止隐式转换、索引列函数运算(防止索引失效)select table_name from table where id = 1; 不要 = '1';

6、禁止select *(网络磁盘IO开销会变多)

7、禁用select for update

8、优先考虑使用覆盖索引,避免回表, explain 的结果,extra 列会出现:using index

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,941评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,397评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,345评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,851评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,868评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,688评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,414评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,319评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,775评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,945评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,096评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,789评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,437评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,993评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,107评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,308评论 3 372
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,037评论 2 355

推荐阅读更多精彩内容