数据库和索引设计简要笔记

2021/12/15 2:21:52

本文主要是介绍数据库和索引设计简要笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 

列设计规范

  • 正确区分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查询和子查询。

  • 尽量避免数据库内置函数作为查询条件。

     



这篇关于数据库和索引设计简要笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程