Java OpenResty Spring Spring Boot MySQL Redis MongoDB PostgreSQL Linux Android Nginx 面试 小程序 Arthas JVM AQS juc Kubernetes Docker 诊断工具


MySQL 规约

MySQL 大约 945 字

表必备三字段:id,gmt_create,gmt_modified

其中 id 必为主键,类型为unsigned bigint 、单表时自增、步长为 1。 gmt_create,gmt_modified 的类型均为 datetime 类型,前者现在时表示主动创建,后者过去分词表示被动更新。

不得使用外键与级联,一切外键概念必须在应用层解决

外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻塞,存在数据库更新风暴的风险;外键影响数据库的插入速度。

SQL性能优化的目标:至少要达到range级别,要求是ref级别,如果可以是consts最好

1 )consts单表中最多只有一个匹配行(主键或者唯一索引),在优化阶段即可读取到数据。
2 )ref指的是使用普通的索引(normal index)。
3 )range对索引进行范围检索。
explain 表的结果,type=index,索引物理文件全扫描,速度非常慢,这个index级别比较range还低,与全表扫描是小巫见大巫。

表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是unsigned tinyint(1表示是,0表示否)

主键索引名为pk_字段名;唯一索引名为uk_字段名;普通索引名则为idx_字段名

小数类型为decimal,禁止使用float和double

如果存储的字符串长度几乎相等,使用char定长字符串类型

不要使用count(列名)或count(常量)来替代count(),count()是SQL 92定义的标准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关

count(*) 会统计值为NULL的行,而count(列名)不会统计此列为NULL值的行。

字符统计函数的区别

SELECT LENGTH("轻松工作");返回为12
SELECT CHARACTER_LENGTH("轻松工作");返回为4
如果需要存储表情,那么选择utf8mb4来进行存储,注意它与utf-8编码的区别。

禁止使用存储过程,存储过程难以调试和扩展,更没有移植性

in操作能避免则避免,若实在避免不了,需要仔细评估in后边的集合元素数量,控制在 1000 个之内

阅读 4226 · 发布于 2019-04-02

————        END        ————

Give me a Star, Thanks:)

https://github.com/fendoudebb

扫描下方二维码关注公众号和小程序↓↓↓

扫描二维码关注我
昵称:
随便看看 换一批