sql

58到家数据库30条军规--我的学习

2019-04-19  本文已影响3人  剑道_7ffc

基础规范

1 禁止使用存储过程、视图、触发器、Event

上面的会消耗cpu,当并发量大时,会把数据库拖死。

2 禁止存储大文件或者大图片

数据库擅长存储与索引,而大文件和图片交给文件系统,数据库只存储uri就可以了。

字段设计规范

1 必须把字段定义为NOT NULL并且提供默认值

Mysql会对null字段进行特殊数据,会增加数据库的复杂度和额外的空间

2 禁止使用TEXT、BLOB类型

会浪费更多的磁盘和内存空间,非必要的大量的大字段查询会淘汰掉热数据,导致内存命中率急剧降低,影响数据库性能

索引使用规范

1 单表索引建议控制在5个以内

2 单索引字段数不允许超过5个

解读:字段超过5个时,实际已经起不到有效过滤数据的作用了

 3 禁止在更新十分频繁、区分度不高的属性上建立索引

解读:

a)更新会变更B+树,更新频繁的字段建立索引会大大降低数据库性能

b)“性别”这种区分度不大的属性,建立索引是没有什么意义的,不能有效过滤数据,性能与全表扫描类似

 4 建立组合索引,必须把区分度高的字段放在前面

解读:能够更加有效的过滤数据

sql使用规范

1 禁止用or,用in来代替

原因:in的效率高于or

2 禁用大表做join和子查询

原因:会浪费内存和cpu资源

3 禁用where的属性上使用函数和表达式

解读:SELECT uid FROM t_user WHERE from_unixtime(day)>='2017-02-15' 会导致全表扫描

正确的写法是:SELECT uid FROM t_user WHERE day>= unix_timestamp('2017-02-15 00:00:00')

4 禁止使用属性的隐式转换

解读:SELECT uid FROM t_user WHERE phone=13812345678 会导致全表扫描,而不能命中phone索引。

5 禁止使用insert into values(XXX,XXX)

容易在增加或者删除字段后出现程序BUG

上一篇下一篇

猜你喜欢

热点阅读