记录sql学习笔记
Mysql命名规范
数据库名
不可使用数据库关键字作为数据库对象
命名应该按实际开发需要建立
1 | w_user(用户数据库) |
临时表命名
临时表以tmp为前缀并以日期为后缀
备份表以bak为前缀并以日期为后缀
所有存储相同索引的表 需要保证列名列类型必须一致
UTF8中的汉字占三个字节 ASCII码占1个字节
建表需要添加表和列的备注
数据库限制
单表数据量大小限制为 500万以内 性能更佳
单表数据量最大行数无限制 取决存储设置和文件系统
限制最多存储4096列(占用内存,IO占用)
每一行数据不能超过6556字节
冷热数据分离
禁止在表中建立预留字段
语义不明,类型不清修改时,会对表进行锁定
禁止在数据库存储图片,文件等二进制数据
存储链接
禁止在线上做数据库压力测试
禁止开发环境,测试环境直连生产环境
Mysql索引设计规范
每个表必须有一个主键
不使用更新频繁和多列的列
不使用
UUID,MD5,HASH,字符串作为主键建议使用自增ID值
限制每个表索引数量,单表索引不超5个
禁止给表的每一列都建立单独索引
索引列的顺序
区分度最高的列反正联合索引的最左侧
尽量把字段长度小的放在联合索引最左侧
最频繁的列放在联合索引左侧
避免建立冗余和重复的索引
尽量避免使用外键
Mysql数据库字段设计规范
优先存储需要的最小数据类型
1 | 将字符串转化为数字类型存储 |
varchar(n)中的n代表是字符数,不是字节数
避免使用TEXT BLOB数据类型
建议将这些类型分离到单独的扩展表中
避免使用ENUM数据类型
修改时,需要使用ALTER语句
ORDER BY操作效率低 需要而外操作
禁止使用数值作为枚举值
尽可能把列定义为NOT NULL(非空)
金额相关的字段使用
decimal类型
使用datetime或timestamp类型存储时间
开发规范
预编译语句进行操作
避免数据类型隐式转化
禁止使用select *查询 及没有子段列表的insert操作
优先利用表上已经存在的索引
操作行为规范
超100万行的批量操作写,要分批多次进行操作