设计高效数据库的原则
2016-05-13 11:04
246 查看
高效数据库设计的五大原则:
1、读写分离原则。这里的读写分离是指,读多写少的字段与写多读少的字段分开存放于不同的表。按照磁盘的工作原理,磁盘是以扇区为单位存放数据的,并且有写缓冲、排队、延迟写入的特点。数据库是以记录为单位的,每次访问,总是将整行记录读入缓冲区,再依命令所需的字段从中筛选数据,组成返回的记录行。读写分离原则能显著改善磁盘和记录的缓存性能。
2、高频与低频字段分离原则。高频字段是指访问较频繁的字段,低频字段是指访问频度较低的字段。不管是高频字段还是低频字段,数据库总是读取整行记录,然后筛选。命令中不访问到的字段,同样要先读入内存。高低频分开存放,能减少记录行读入的字节数(写入也一样),减少不必要的读写。如果部署分布式数据库,按这个原则作垂直划分,其效果比单机数据库的效果更明显。
3、为最常用的字段建立索引。当命令中涉及的字段都在某个索引中时,命令执行过程中不需要访问表数据,仅从索引中获得所需的字段值,组成记录返回。
4、为经常搜索的字段建立索引。当要搜索的字段都存在某个索引中时,索引过程只需在索引中作匹配运算,仅当匹配到某个记录,并且要返回的字段不在索引中时,才从表数据中取回这行记录。
5、主键越短越好,并且最好是整型。索引是以区为单位存放的,类似于磁盘的扇区。索引树节点也是以区为单位的。索引的大小,与索引项的大小成正比。索引项的字节数越少越好。索引项总是定长的,如果索引字段包含可变长字段(varchar,nvarchar之类的),那么索引该字段的字节数是这个字段的最大可能字节数。另一方面,在IA-32架构的CPU中,读写一个32位(4字节)整型值的速度是读取一个字节的2倍!如果读取一个100字节的字符串,耗时是读一个32位整型的200倍。可见,主键的选型,对检索记录的性能有非常大的影响。
总结:在实际的数据库设计中,我们应该根据具体的情况灵活地将上面的原则应用到设计过程中,切不可生搬硬套,以免降低数据库的效率。
1、读写分离原则。这里的读写分离是指,读多写少的字段与写多读少的字段分开存放于不同的表。按照磁盘的工作原理,磁盘是以扇区为单位存放数据的,并且有写缓冲、排队、延迟写入的特点。数据库是以记录为单位的,每次访问,总是将整行记录读入缓冲区,再依命令所需的字段从中筛选数据,组成返回的记录行。读写分离原则能显著改善磁盘和记录的缓存性能。
2、高频与低频字段分离原则。高频字段是指访问较频繁的字段,低频字段是指访问频度较低的字段。不管是高频字段还是低频字段,数据库总是读取整行记录,然后筛选。命令中不访问到的字段,同样要先读入内存。高低频分开存放,能减少记录行读入的字节数(写入也一样),减少不必要的读写。如果部署分布式数据库,按这个原则作垂直划分,其效果比单机数据库的效果更明显。
3、为最常用的字段建立索引。当命令中涉及的字段都在某个索引中时,命令执行过程中不需要访问表数据,仅从索引中获得所需的字段值,组成记录返回。
4、为经常搜索的字段建立索引。当要搜索的字段都存在某个索引中时,索引过程只需在索引中作匹配运算,仅当匹配到某个记录,并且要返回的字段不在索引中时,才从表数据中取回这行记录。
5、主键越短越好,并且最好是整型。索引是以区为单位存放的,类似于磁盘的扇区。索引树节点也是以区为单位的。索引的大小,与索引项的大小成正比。索引项的字节数越少越好。索引项总是定长的,如果索引字段包含可变长字段(varchar,nvarchar之类的),那么索引该字段的字节数是这个字段的最大可能字节数。另一方面,在IA-32架构的CPU中,读写一个32位(4字节)整型值的速度是读取一个字节的2倍!如果读取一个100字节的字符串,耗时是读一个32位整型的200倍。可见,主键的选型,对检索记录的性能有非常大的影响。
总结:在实际的数据库设计中,我们应该根据具体的情况灵活地将上面的原则应用到设计过程中,切不可生搬硬套,以免降低数据库的效率。
相关文章推荐
- .NET通用的数据库操作类(支持多种数据库)
- MySQL数据库存储引擎比较
- 四种方式实现SQLServer 分页查询
- 一些查看mysql信息常用sql
- SQL SERVER 对数据库的一些基本操作:创建、更改、查看、删除……
- SQL server 2014 内存表特性概述
- MongoDB常用命令
- Linux中redis主从配置
- oracle问题 plsql连接不上远程数据库
- Oracle取消用户连续登录失败次数限制
- SQL SERVER 10进制转换36进制
- Oracle11-本地连接没问题,远程连接有问题解决方案
- MYSQL必知必会读书笔记 第二十三章 使用存储过程
- 基于nginx tomcat redis分布式web应用的session共享配置
- 【原创】搭建Nginx(负载均衡)+Redis(Session共享)+Tomcat集群
- 动态sql语句和动态传入参数个数
- MSSQLServer 使用linkserver 操作mysql
- 获取assets目录文件解析数据存储数据库 Listview展示 Dialog删除修改从数据库获取数据
- 创建mySQL触发器
- SuperGarden mySQL常用命令