数据库和索引设计简要笔记
作者:互联网
列设计规范
-
正确区分tinting、int、bigint的范围
-
使用varcher(20)存储手机号,不要使用整数(请求参数可能是字符串,防止类型的隐式转换)
-
使用int存储ipv4 不要使用char(15)
-
涉及金额使用decimal/varchar,并指定精度
-
不要设计为null的字段、而是用空字符,因为null需要更多的空间、并且是的索引和统计变得更为复杂。
索引规范
-
唯一索引使用uniq_[字段名]来命名
-
非唯一索引使用idx_[字段名]来命名
-
不建议在频繁更新的字段上建立索引
-
单张表的索引数量建议控制在5个以内,索引过多,不仅会导致插入的性能下降,还可能导致mysql的索引出错和性能下降
-
组合索引字段数量不建议超过5个,理解组合索引的最左匹配原则,避免重复建设索引,比如你建良(x,y,z)相当于你建了(x)(x,y) (x,y,z)
SQL规范
-
禁止使用select *,只获取必要字段,select会增加cpu/io/内存、带宽的消耗。
-
Insert 必须指定字段,禁止使用insert into table values()指定字段插入,在表结果变更时,能保证对应用程序无影响。
-
隐式类型转换会使索引失效,比如:手机号搜索时没有转成字符串
-
禁止在where后面的列中使用函数或者表达式,导致不能命中索引。
-
禁止负向查询(!= not like not in等 )以及%开头的模糊查询,导致不能命中索引。
-
避免直接返回大结果导致造成内存溢出,可以采用分段和游标方式。
-
返回结果尽量采用limit分页显示。
-
尽量在order by group by的列上创建索引。
-
大表扫描尽量放在镜像库上去做。
-
禁止大表join查询和子查询。
-
尽量避免数据库内置函数作为查询条件。
标签:导致,简要,数据库,查询,索引,禁止,使用,隐式 来源: https://www.cnblogs.com/jiliunyongjin/p/15689604.html