数据库注意事项
命名规范,编码
-
线上环境、开发环境、测试环境数据库内网域名遵循命名规范
- 业务名称:xxx
- 线上环境:csdn.×xx.db
- 预发布环境:csdn.×xx.pdb
- 测试环境:csdn.×xx.tdb
- 开发环境: csdn.×xx.ddb
- 从库在名称后加-s标识,备库在名称后加-ss标识
- 线上从库:csdn.xxx-s.db
- 线上备库:csdn.xxx-ss.db
注: csdn为公司名称缩写
-
索引命名规则
- 普通索引:IDX_字段名
- 唯一索引:IDX_UQE_字段名
- 组合索引:IDX_COM_字段名_字段名_字段名
-
字段01标记
DEL_FLAG 逻辑删除标记,0未删除,1删除 -
字段命名规则
- 可能关联多个不同表的id的字段建议叫 RELATION_ID(关联id)
- 时间以字段以 _TIME 后缀结尾
- 带有标识的字段以 _FLAG 后缀结尾
- 自定义code码字段以 _CODE 后缀结尾
- 所有使用0,1,2等字段代表特殊含义的需要在字段注释中说明清楚,码中说明清楚,修改了定义规则需要及时修改数据库注释。
-
目前的数据库表编码集(utf8,utf8_bin)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin -
数据库表结构修改操作
所有修改数据库表结构的操作都需要写出对应的修改表结构的sql语句,发给数据库管理人员。避免不同环境的数据库表结构不同一
索引
-
添加索引sql
-
添加主键索引
ALTER TABLE
table_nameADD PRIMARY KEY (
column)
-
添加唯一索引
ALTER TABLE
table_nameADD UNIQUE (
column)
-
添加全文索引
ALTER TABLE
table_nameADD FULLTEXT (
column)
-
添加普通索引
ALTER TABLE
table_nameADD INDEX index_name (
column)
-
添加组合索引
ALTER TABLE
table_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;`
-