博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql开发规范
阅读量:5339 次
发布时间:2019-06-15

本文共 1869 字,大约阅读时间需要 6 分钟。

1:库表设计

  • 库名、表名、字段名采用小写字母,并采用下划线分割;对相关功能的表应该使用相同的前缀,如member_xxx,前缀通常为库名或依赖主实体对象;
  • 所有的表以及字段都必须有备注、详细说明表以及字段的含义
  • 涉及货币金额或其他精度敏感的数据必须使用定点数Decimal来替代float和double
  • 库名、表名、字段名禁止使用mysql保留字,如data、like、desc等
  • 控制表字段数,单表不超过50个纯int/20个varchar(10)字段等同存储体积的字段数,上限控制在20~50

2:索引设计

基本规则:索引不是越多越好,能不添加索引尽量不添加索引,过多的索引会严重降低插入和更新的效率,并带来读写冲突和死锁

  • 索引名称必须使用小写,普通索引按照idx_字段名_字段名[_字段名]进行命名,唯一索引按照 uniq_字段名_字段名[_字段名]进行名
  • 表必须有主键,推荐使用独立业务的AUTO_INCREMENT列或全局ID生成器做主键,禁止使用多字段做联合主键
  • 不使用UUID/MD5/HASH等函数生成无规则值做主键,效率极差
  • 索引数量控制
  1. 单张表中索引数量不超过5个
  2. 单个索引中的字段数不超过5个
  3. 对字符串使用前缀索引,索引长度不超过10个字符
  • 索引字段的顺序需要考虑每个字段去重以后的数量,区分度最大的[个数最多的]放在前面
  • 合理创建联合索引(避免冗余),符合最左前缀原则:(a,b,c)相对于(a)、(a,b)、(a,b,c)
  • 可能需要添加索引的字段
  1. Order by,group by,distinct的字符按需要添加在索引的后面
  2. update,delete语句需要根据where条件添加索引
  3. 对于join操作,需要join字段上添加索引
  • 索引使用禁忌
  1. 不使用%前导的查询,如like ‘%ab’
  2. 不使用负向查询,如 not in/not lilke/<>
  3. 不在区分度的列上建立索引,如性别
  4. 不在索引列进行数学运算和函数运算

        示例:假设在表table中id建立索引

  1. select col_A,col_B from table where id+1>100 不会使用索引
  2. select col_A,col_B from table where id>100+1 会使用索引

3:sql优化

  • 线上尽量少使用 大sql,可能一条大sql就把整个数据库堵死,将复杂sql拆分为多条简单的sql,化繁为简
  1. 一条sql只能在一个cpu运算,如果sql比较复杂执行效率会非常低
  2. 简单sql缓存命中率更高
  3. 减少锁表时间
  4. 充分利用多核cpu,提高并发效率
  • 减少mysql端的数学运算和逻辑判断,避免sql语句出现md5()、order by rand()等
  • 过滤表记录合并不去重的情况,改写union为union all
  • 减少使用拼接sql,使用预编译语句,降低sql注入的概率
  • where 条件中的非等值条件(in between < <= > >=)会导致使用不了联合索引的后续字段,注意避免
  • where条件比较,字段类型和传入值必须保持类型一直,避免隐式转换

      示例

         字段:code varchar(50) not null coment '编码' #code 上建立了索引

  1. select * from table_name where code=10001;不会使用索引
  2. select * from table_name where code='10001';会使用索引
  • Limit 分页优化
  1. 传统分页

select * from table limit 1000,10

limit原理:

LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目

limit 1000,10//检索记录行1001-1010,偏移量越大则越慢

  1. 推荐分页
  • 分页方式1:

Select * from table WHERE id >= ( select id from table limit 10000,1 ) limit 10;

id是主键查询的速度比较快

  • 分页方式2:
  • 程序取ID: Select id from table limit 10000,10;

  • Select * from table WHERE ID in(123,456…);

 

转载于:https://www.cnblogs.com/LipeiNet/p/7799366.html

你可能感兴趣的文章
struts2入门之准备工作
查看>>
从C语言的弱类型属性说起
查看>>
大牛博客
查看>>
图片的显示隐藏(两张图片,默认的时候显示第一张,点击的时候显示另一张)...
查看>>
Docker 安装MySQL5.7(三)
查看>>
python 模块 来了 (调包侠 修炼手册一)
查看>>
关于CSS的使用方式
查看>>
本地MongoDB服务开启与连接本地以及远程服务器MongoDB服务
查看>>
跨域解决方案之CORS
查看>>
学习RESTFul架构
查看>>
分析语句执行步骤并对排出耗时比较多的语句
查看>>
原生JS轮播-各种效果的极简实现
查看>>
软件工程总结作业---提问回顾与个人总结
查看>>
计数器方法使用?
查看>>
带你全面了解高级 Java 面试中需要掌握的 JVM 知识点
查看>>
sonar结合jenkins
查看>>
解决VS+QT无法生成moc文件的问题
查看>>
AngularJs练习Demo14自定义服务
查看>>
stat filename
查看>>
关于空想X
查看>>