数据库注意事项,命名规范,编码 第一篇

数据库注意事项


命名规范,编码

  1. 线上环境、开发环境、测试环境数据库内网域名遵循命名规范

    • 业务名称:xxx
    • 线上环境:csdn.×xx.db
    • 预发布环境:csdn.×xx.pdb
    • 测试环境:csdn.×xx.tdb
    • 开发环境: csdn.×xx.ddb
    • 从库在名称后加-s标识,备库在名称后加-ss标识
    • 线上从库:csdn.xxx-s.db
    • 线上备库:csdn.xxx-ss.db
      注: csdn为公司名称缩写
  2. 索引命名规则

    • 普通索引:IDX_字段名
    • 唯一索引:IDX_UQE_字段名
    • 组合索引:IDX_COM_字段名_字段名_字段名
  3. 字段01标记
    DEL_FLAG 逻辑删除标记,0未删除,1删除

  4. 字段命名规则

    • 可能关联多个不同表的id的字段建议叫 RELATION_ID(关联id)
    • 时间以字段以 _TIME 后缀结尾
    • 带有标识的字段以 _FLAG 后缀结尾
    • 自定义code码字段以 _CODE 后缀结尾
    • 所有使用0,1,2等字段代表特殊含义的需要在字段注释中说明清楚,码中说明清楚,修改了定义规则需要及时修改数据库注释。
  5. 目前的数据库表编码集utf8,utf8_bin
    ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin

  6. 数据库表结构修改操作
    所有修改数据库表结构的操作都需要写出对应的修改表结构的sql语句,发给数据库管理人员。避免不同环境的数据库表结构不同一


索引

  • 添加索引sql

    • 添加主键索引
      ALTER TABLEtable_nameADD PRIMARY KEY (column)

    • 添加唯一索引
      ALTER TABLEtable_nameADD UNIQUE (column)

    • 添加全文索引
      ALTER TABLEtable_nameADD FULLTEXT (column)

    • 添加普通索引
      ALTER TABLEtable_nameADD INDEX index_name (column)

    • 添加组合索引
      ALTER TABLEtable_nameADD INDEX index_name (column1,column2,column3)

  • 不需要使用索引情况

    • 表比较小,数据量不会多

    • 赋值有限的列(枚举),不要创建索引。创建的索引返回的行越少越好,此时区分度大。

    • 用不上索引的列,不要创建索引。

    • 长字符串的列,不要全部创建索引,但可以使用短索引(名字的头8个字符)。

  • 使用索引

    • 可能用到索引的地方:where 子句,order by,group by
    • 索引有效的情况,使用如下筛选条件:
      <,<=,=,>,>=,between,in,like’admin%’,独立索引+or+独立索引+mysiam
  • 索引失效

    • is not null 或 is null 索引会失效

    • not in 或<> 或!=

    • like查询是以%开头,不使用索引。like ‘%admin’

    • 关联表的id需要和关联表中的id的字符集,排序集一致,否则关联不会使用索引检索。

    • or+innodb

    • 字符类型在where子句中不加引号,不使用索引

    • 对字段加函数或者运算的

    • 在order by操作中,mysql只有在排序条件不是查询条件表达式时才使用索引。尽管如此,在涉及多个数据表的查询里,即使有索引可用,那些索引在加快ORDER BY操作方面也没什么作用。

    • select 语句中字段中的子查询是不使用索引的,除非添加必要的别的条件来使用索引。
      如:SELECT scolumn.ID,( SELECT COUNT(ID)FROMS_COMMENT AS discuss WHERE discuss.RELEVANCE_ID = article.SEQUENCE_ID' AND discuss.CODE ='资讯平路') AS discussCount FROM S_COLUMN AS scolumn LEFT JOIN S_ARTICLE AS article ON scolumn.ID = article.COLUMN_ID LEFT JOIN S_COMMON_ARTICLE AS commonArticle ON commonArticle.ARTICLE_ID = article.ID
      这个子查询中 article.SEQUENCE_ID 和 RELEVANCE_ID都有索引确不会使用,而是用的是code的索引,所以要避免selec中子查询。

    • 连接查询时,如果关联字段排序字符集不一样,则索引会失效,此点需在建表时注意。

    • 如果mysql估计使用全表扫描要比使用索引快,则不使用索引。

        比如:列id均匀的分布在1-100之间。下面的sql则不会使用索引	        `select * from table_name where id > 1 and id<90;`		
      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值