1,频繁查询需求的接口在业务层,添加缓存例如使用redis缓存
2,养成查看sql执行计划的习惯
3,按需开启或者关闭
query_cache 4,合理的增大inndb_buffer_pool_size
5,按需设置主从数据库,读写分离等等
6,使用高性能的SDD硬盘存储数据
7,定期维护更新删除数据比较多的表,优化(会锁表)
8,sql尽量避免全表扫描
9,
确定单条返回需要的列10
,避免大偏移量的分页查询,避免不已就利用延迟关联或者子查询优化超多分页场景
12,尽可能避免复杂的加和子查询
13,在加入表的时候使用相当类型的列,并将其索引
14,加入查询遵循小结果集驱动大的结果集的原则,BNLJ
15, in和exists的使用遵循,外层查询表小于子查询表,则用存在,外层查询表大于子查询表,则用于
16,注意隐式转换
17,不要使用ORDER BY RAND()语句,尽量减少filesort
18,其中语句中不要有运算
19,在查询建议不要超过1000,合理拆分插入,删除语句
20,不要使用计数(列名)或计数(常量)来替代计数(*),计数(* )是SQL92定义的标准统计行数的语法,跟数据库无关,跟NULL和非NULL无关。说明:count(*)会统计值为NULL的行,而count(列名)不会统计此列为NU LL值的行
21,TRUNCATE TABLE比较DELETE速度快,且使用的系统和事务日志资源少,但TRUNCATE无事务且不触发触发器,有可能造成事故
22,业务层,分页查询逻辑时,若计为0应直接返回,不继续进行分页查询
23,使用ISNULL()来判断是否为NULL值.Not与任何值的直接比较都为
NULL。24,count语句不会出现null,但是sum会,注意NPE问题
25,count(distinct col)计算该列除了之外的不重复行数,注意计数(distinct col1,col2)如果其中一列全为NULL,那么即使另一列有不同的值,也返回为0。
26,业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引。墨菲定律
27,超过三个表禁止join。需要join的字段,数据类型必须绝对一致;多表关联查询时,保证被关联的字段需要有索引
.28,在varchar字段上建立索引时,必须指定索引长度,不必要对全字段建立索引,根据实际文本区分度决定索引长度即可.29
,页面搜索严禁左模糊或者全模糊(不走索引的),如果需要请走搜索引擎来解决
30,如果有顺序by的场景,请注意利用索引的有序性,依据业务排序要求等添加升序或者降序索引
31 ,利用覆盖索引来进行查询操作
32,建组合索引的时候,区分度最高的在最左边,存在非等号和等号混合时,等号条件的列前置
33,合理添加组合索引(组合索引最多支持16列)
34,主键长度越小越好,最好永远都未一张表添加一个主键ID并设置非 自增
35,删除无用的索引基数接近为1的索引,msyql8.0使用隐藏索引
36,表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是unsigned tinyint(1表示是,0表示否)
37,表名,字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字,MySQL在Windows下不区分大小写,但在Linux下默认是区分大小写
38,表名不使用复数名词
39,禁用保留字,desc,范围,匹配,延迟
40,主键索引名为pk_字段名;唯一索引名为uk_字段名;普通索引名则为idx_字段名
41,小数类型为decimal,禁止使用float和
double.42,如果存储的字符串长度几乎相等,使用char定长字符串类型
.43,字段允许适当冗余,以提高查询性能,但必须考虑数据一致。冗余字段应遵循:1)不是频繁修改的字段
1.创建表的存储引擎必须是InnoDB,并指定主键,不允许外键,同时不允许存在和主键重复的索引
2。非分区表不允许使用联合主键。
3.自增长字段必须是主键或唯一索引。
4.不允许在数据库中存储诸如图片,影像之类的二进制数据。
5.不允许使用TEXT类型字段
6。建表时不允许显式的指定除了utf8,utf8mb4之外的其他字符集,
如果有存储评论,名字,描述等可能包含表情,特殊字符的字符串,必须使用utf8mb4.7。
对于所有声明为NOT
8.必须包含时间戳字段DataChange_LastTime,定义默认值为
CURRENT_TIMESTAMP on update,并添加索引.9。DataChange_CreateTime
,作为行创建时间,定义默认值时请不要添加
CURRENT_TIMESTAMP on NULL的字段,必须显式指定默认值。更新,直接设置CURRENT_TIMESTAMP即可。
10.禁止使用子查询。
11.禁止使用选择*,必须指定需要的字段。
12.更新/删除只能单表操作,不允许多表关联,不允许用子查询,且一定要带条件.13。
插入语句要显式指定插入的列名,且不允许使用insert .... select的形式。
14.不允许使用存储过程,存储函数,触发器和视图.15。
单条查询语句中,不允许出现多于一次的连接.16。
不要在哪里后的筛选字段上做运算
.17 。不允许在查询语句中指定索引提示force | 忽略| 使用索引| 关键。