关系型数据库性能体系,设计和效率提升 1
1 前言 2
1.1目的 2
1.2预期的读者和阅读建议 2
2 数据库模型设计规范 2
2.1 数据库建模原则性规范 2
2.2 实体型之间关系认定规范 2
2.3 范式化1NF的规范 3
2.4 范式化2NF的规范 4
2.5 范式化3NF的规范 4
2.5 反范式化冗余字段使用规范 4
2.6 数据库对象命名基本规范 5
2.6.1遵循行业规范 5
2.6.2简单命名原则 5
2.6.3 字符范围原则 5
2.6.4字母全部大写或小写原则 6
2.6.5勿用保留词原则 6
2.6.5同义性原则 6
2.6.6富有含义原则 6
2.6.7 扩展性原则 6
3 表的设计规范 6
3.1 命名规范 6
3.1.1 表的命名规范 6
3.1.2 字段的命名规范 7
3.2 表的设计规范 7
3.2.1 指定表空间规范 7
3.2.2 表的主键规范 7
3.2.3 表的外键规范 8
3.2.4 字段类型及宽度的规范 8
3.2.5 一个表所含字段总长度的规范 8
3.2.6 一个表所含字段访问频繁度的规范 8
3.2.7 大对象字段(BLOB,CLOB)使用规范 9
3.2.8 关于字段能否为NULL值 9
3.2.9 关于冗余列的规范 9
3.2.10 使用注释的规范 9
3.2.11 一个表所含数据量的规范 10
3.2.12 增量同步表的设计规范 10
3.3 字段类型规范 10
3.3.1 不使用会发生隐式转换:INTEGER,FLOAT 10
3.3.2 不使用过时老类型:RAW,LONG,LONG RAW 10
3.3.3 国家字符集相关 10
3.3.4 不能使用大对象:BLOB,CLOB,NCLOB 11
3.3.5 不能使用高精度:TIMESTAMP 11
3.3.6 关于CHAR字段 11
4 分区表的设计规范 11
4.1 表空间及分区表的概念 11
4.1.1 表空间 11
4.1.2 分区表 11
4.2 表分区的具体作用 11
4.3 表分区的优缺点 12
4.4 分区表设计规范 12
4.2.1 不使用全局索引 12
4.2.2 RANGE分区的规范 12
4.2.3 LIST分区的规范 13
4.2.4 HASH分区的规范 13
4.2.5 RANGE-LIST分区的规范 14
4.2.6 RANGE-HASH分区的规范 14
5 索引的设计规范 15
5.1 索引分类 15
5.1.1单列索引与复合索引 15
5.1.2 唯一索引与非唯一索引 15
5.1.3 B树索引、位图索引与函数索引 15
5.2 命名规范 15
5.3 索引设计规范 15
5.3.1 指定表空间规范 16
5.3.2 主键索引的规范 16
5.3.3 唯一约束索引的规范 17
5.3.4 外键列索引的规范 17
5.3.5 复合索引的规范 17
5.3.6 函数索引的规范 17
5.3.7 位图索引的规范 18
5.3.8 反向索引的规范 18
5.3.9 分区索引的规范 18
5.3.10 索引重建的规范 18
6 其他数据库对象设计规范 18
6.1 命名规范 18
6.2 视图设计规范 19
6.2.1 尽量使用简单的视图,避免使用复杂的视图 19
6.2.2 按照必要性原则建立视图 19
6.3 存储过程、函数、触发器的设计规范 19
6.3.1 关于触发器的设计 19
7 SQL访问规范 20
7.1 尽量不要写复杂的SQL 20
7.2 避免使用SELECT * 20
7.3 INSERT时需写全列名 20
7.4 进行DML操作时使用CTAS进行数据备份 20
7.5 大数据量DML操作分多次执行 21
7.6 使用绑定变量,降低高硬解析 21
7.7 选择最有效率的表名顺序 21
7.8 关注WHERE子句中的连接顺序 21
7.9 用EXISTS替代IN 22
7.10 用表连接替换EXISTS 23
7.11用EXISTS替换DISTINCT 24
7.12 尽量用union all替换union 24
7.13 使用DECODE函数来减少处理时间 24
7.14 尽量避免用order by 25
7.15 用Where子句替换HAVING子句 25
7.16 减少多表关联 25
7.17 避免重复访问 26
7.17.1 使用group by 26
7.17.2 用表更新表 26
7.17.3竖向显示变横向显示 26
7.18 完成事务及时commit 27
7.19数据库连接及时关闭 27
7.20 索引的使用 27
7.20.1避免在索引列上使用函数或运算 27
7.20.2避免改变索引列的类型 28
7.20.3避免在索引列上使用NOT 28
7.20.
2021-09-08 09:10:11
93KB
关系型数据库