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扫描下方二维码关注公众号和小程序↓↓↓
昵称:
随便看看
换一批
-
Kubernetes kubectl top 命令报 error: Metrics API not available阅读 4178
-
LRU 算法 Java 实现阅读 983
-
Java jcmd 开启和关闭 JMX阅读 4064
-
Spring Boot 修改 RestTemplate 默认编码格式阅读 7559
-
macOS M1 芯片 IDEA Debug Rust 无法运行问题阅读 988
-
软考-系统架构设计师:网络规划、设计与实施阅读 2586
-
H2 Syntax error in SQL statement expected "identifier"阅读 1757
-
软考-系统架构设计师:软件开发模型阅读 3093
-
Spring Boot 单元测试 @WebMvcTest 对 Controller 进行单独测试阅读 1141
-
macOS 桌面版微信使用默认浏览器打开链接阅读 855