1.区分业务主键合和数据库主键
业务主键用于标识业务数据,进行表与表之间的关联;
数据库主键为了优化数据存储(Innodb会生成6个字节的隐含主键)
2.根据数据库的类型,考虑主键是否要顺序增加
有些数据库是按住建的顺序逻辑存储的(顺序增加对IO有帮助)
3.主键的字段类型所占空间要尽量的小
对于使用汇集索引方式存储的表,每一个索引后都会附加主键信息。数据库
1.下降数据导入的效率
2.增长维护成本
3.虽然不建议使用外键约束,可是相关联的列上必定要创建索引 函数
1.下降数据导入的效率。
2.可能会出现意想不到的数据异常。
3.使业务逻辑变复杂。工具
1.没法准确的知道预留字段的类型
2.没法准确的指导预留字段中所存储的内容。
3.后期维护预留字段所要的成本,同增长一个字段所须要的成本是相同的。
4.严禁使用预留字段。性能
反范式化是针对范式化而言的,就是打破第三范式的规定,
为了性能和读取效率的考虑而适当的对第三范式的要求进行违反,
而容许存在少许的数据冗余,换句话来讲:反范式化就是实用空间来换取时间。优化
1.减小表的关联数量
2.增长数据的读取效率
3.反范式化必定要适度spa
维护和优化要作什么
1.维护数据字典
2.维护索引
3.维护表结构
4.在适当的时候对表进行水平拆分或垂直拆分设计
如何维护数据字典
1.使用第三方工具对数据字典进行维护
2.利用数据库自己的备注字段来维护数据字典。以MySQL为例 (COMMENT)增长注释索引
如何维护索引
如何选择合适的列创建索引?
1.出如今WHERE从句,GROUP BY 从句, ORDER BY 从句中的列
2.可选择性高的列要放在索引的前面
3.索引中不要包括太长的数据类型
注意事项:
1.索引并非越多越好,过多的索引不但会下降写效率并且会下降读的效率
2.按期维护索引碎片
3.在SQL语句中不要使用强制索引关键字效率
维护表结构
注意事项:
1.使用在线变动表结构的工具
2.同时对数据字典进行维护
3.控制表的宽度和大小
数据库中适合的操做
1.批量操做 VS 逐条操做
2.禁止使用Select * 这样的查询
3.控制使用用户定义函数
4.不要使用数据库中的全文索引
表的垂直拆分
为了控制表的宽度能够进行表的垂直拆分
好处:优化了I/O读取效率 由于数据库是以页的形式存储的,行越多就越快,
可是列的增长就会是的宽度增长,行数很少,因此垂直拆分也减少了表的宽度
1.常常一块儿查询的列放在一块儿
2.text,blob等大字段拆分到附加表中数据类型
表的水平拆分 为了控制表的大小能够进行表的水平拆分 解决了数据量大多的问题