1、设计表的规范
- 避免出现Null,尽量用0代替Null。
- 使用枚举或者整数代替字符串类型。
- 除了关系表,给每张表加入创建时间、更新时间、是否显示、以及预留字段。
- 尽量用SMALLINT代替INT,例如订单状态、支付状态之类的。
- 表名不使用复数名词
- 禁用保留字,如desc、range、match、delayed等
- 唯一索引名为uk_字段名;普通索引名则为idx_字段名。
- 小数类型为decimal,禁止使用float和double。说明:float和double在存储的时候,存在精度损失的问题,很可能在值的比较时,得到不正确的结果
- 表的命名最好是加上“业务名称_表的作用”
- 字段允许适当冗余,冗余字段应遵循:1)不是频繁修改的字段。2)不是varchar超长字段,更不能是text字段。
- 单表行数超过500万行或者单表容量超过2GB,才推荐进行分库分表。
说明:uk_即unique key;idx_即index的简称
以下都是针对不得已的大表
2、查询规范
- 使用索引,也不是乱用索引。具体:https://www.jianshu.com/p/30eb60ad12f0
- SQL语句中IN包含的值不应过多
- SELECT语句务必指明字段名称
- 当只需要一条数据的时候,使用limit 1
- 如果排序字段没有用到索引,就尽量少排序
- 如果限制条件中其他字段没有索引,尽量少用or
- 避免在 where 子句中对字段进行 null 值判断
- 避免在where子句中对字段进行表达式操作
- 利用小表去驱动大表
- 主键或者索引列放前面
- 不建议使用%前缀模糊查询(会导致索引失效)
- 使用合理的分页方式以提高分页的效率
select id,name from table_name where id> 866612 limit 20 #用上面替换下面
select id,name from table_name limit 866613, 20 #