如何选择主键
1.区分业务主键合和数据库主键
业务主键用于标识业务数据,进行表与表之间的关联;
数据库主键为了优化数据存储(Innodb会生成6个字节的隐含主键)
2.根据数据库的类型,考虑主键是否要顺序增长
有些数据库是按住建的顺序逻辑存储的(顺序增长对IO有帮助)
3.主键的字段类型所占空间要尽可能的小
对于使用聚集索引方式存储的表,每个索引后都会附加主键信息。
避免使用外键约束
1.降低数据导入的效率
2.增加维护成本
3.虽然不建议使用外键约束,但是相关联的列上一定要建立索引
避免使用触发器
1.降低数据导入的效率。
2.可能会出现意想不到的数据异常。
3.使业务逻辑变复杂。
关于预留字段
1.无法准确的知道预留字段的类型
2.无法准确的指导预留字段中所存储的内容。
3.后期维护预留字段所要的成本,同增加一个字段所需要的成本是相同的。
4.严禁使用预留字段。
反范式化设计
反范式化是针对范式化而言的,就是打破第三范式的规定,
为了性能和读取效率的考虑而适当的对第三范式的要求进行违反,
而允许存在少量的数据冗余,换句话来说:反范式化就是实用空间来换取时间。
为什么反范式化
1.减少表的关联数量
2.增加数据的读取效率
3.反范式化一定要适度
数据库维护与优化
维护和优化要做什么
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等大字段拆分到附加表中
表的水平拆分
为了控制表的大小可以进行表的水平拆分
解决了数据量大多的问题