当前位置: 代码迷 >> MySQL >> MYSQL轨范
  详细解决方案

MYSQL轨范

热度:137   发布时间:2016-05-05 16:53:43.0
MYSQL规范
一.DB应用规范
1.让数据库做它擅长的事
不在数据库中做运算    复杂运算移到程序中   使用简单sql
2.控制库表容量
  单库不超过300个表  合理分表  按id   date   area等拆分    将历史数据与实时数据分表存放   不用的数据及时删除,删除后alter table tab engine=innodb|myisam 释放空间 避免全表扫时,扫描一些空块。
3.控制字段属性
  表字段少而精  字段类型长度选择准确    查看存储类型范围 mysql> ? int  列的默认值最好不要用null,使用统一的默认值。
4.拒绝3B
  Big SQL        Big Transaction        Big Batch   针对3种解决方法就是一个字 拆
5.尽量少用库的辅助功能
  不使用触发器  尽量不使用过程  函数   视图

二.索引字段规范
1.索引的优缺点
  “改善”查询速度  减慢DML操作(增删改)   索引是有开销的
2.合理使用索引
  Innodb引擎一定要加主键索引  建议int  or bigint
  选择索引字段时,要选常在where条件中出现的且列中重复值较少的  举例:性别就不适合在OLTP业务上建索引  只有两个值 0  or  1 。
  使用组合索引时,索引列的位置很重要,第一列尽量使用重复值少且常在where条件中用到的列 index(col1,col2) 如果where中用到col1 > n  或 between and 这种范围查询 则col1后面的列不会再走索引。
  在写sql查询时,一定要 where column=value 方式  不要在value上使用函数和类型转换
  字符字段加索引时 要使用前缀索引  举例:index(`name`(16));
  尽量不要使用外键,约束问题在程序方面控制。

三sql编写规范
1.查询符合条件的数据
  Select col1,col2 from tab where col1=10;
2.查询需要的字段
  查询用到的字段  select col1,col2 from … where  避免使用select *  
3. sql中使用like
  Select col1,col2 from tab where col1 like ‘aaa%’;  如果col1上有索引会使用 尽量不要写成 like ‘%aaa%’;
4.避免负向查询
  Where条件中不使用 not  !=  <>  not exists  not in   not like 等
5.少使用count(*)
  Innodb引擎的表少使用count(1) 开销大  这种统计类sql应放到统计库上执行
6.分页查询
  Select col1,col2 from tab limit m,n;  m取值越大 查询越慢   推荐使用方式:select  col1,col2 from tab where id>m limit n;  select col1,col2 from tab  where col1>( select col1 from tab where col2 between ‘x’ and ‘z’ limit m,1) limit 10;
7.用表连接代替子查询
  Select tab1.col1,tab1.col2 from tab1 join tab2 where tab1.co1=tab2.coln and col2=33;  避免select col1,col2 from tab1 where col1 in (select coln from tab2 where colx=ppp) and col2=33;
8.执行时可用explain看执行计划
   Explain extened select col1,col2 from tab where ….  比较不同的sql的执行计划 选取最优

四 命名规范
名称命名用_或字母开头 小写 长度不要超过30字符。避免使用库中保留的关键字
库名使用db_业务名称_库名
普通表名使用tb_模块名称_表名
统计表名使用stat_模块名称_表名
日志表名使用log_模块名称_表名
索引名字使用inx_表名_字段名称

五 升级规范
一定要写上需要升级的库名 、执行时间、  是否需要先停业务
对于新增表,需要有表和字段的描述,预计表的存储容量  建表时把相关的索引加上,等表到一定量时再加索引,锁表时分很长。

  相关解决方案