论文部分内容阅读
摘 要:在进行大数据处理软件或WEB站点设计时,数据库访问效率是用户对软件的基本要求,也是判断一个软件是否优良的重要标准。本文将从数据库设计、连接方式和数据检索方式三个方面来简单介绍几点提高数据库访问效率的办法。
关键词:数据库;效率;索引;SQL查询
1、引言
随着公司产品的发展,测试数据数据量的逐渐增大,数据库以其数据共享、数据冗余度低、数据独立性高、数据集中度高和数据一致性及可维护性高的五大优点,已经成为了公司软件进行大量、复杂数据处理的必选工具。因此,如何提高数据库访问效率也就成为了软件设计时需要重要考虑的问题之一,如处理不当,则会导致软件运行速度慢、系统卡死等重大问题。
2、数据库设计
2.1 使用分布式数据库
分布式数据库,顾名思义,也就是数据库中的数据不是存储在同一场地,而是分布存储在多个场地。例如,长庆油田的数字化系统即采用了分布式数据库,由每个站点来管理该站下油井的基础数据和测试数据,然后通过数据同步技术来将本站所管理数据与厂级中心服务器进行数据同步。这种设计方案的优点是,局部应用的响应速度较快,可扩展性好,易于集成现有的系统。如公司要进行大量、多层次的数字化产品安装及系统实施,分布式数据库将是一个很好的数据处理技术方案。
2.2 分类拆分数据量大的表
对于经常使用的数据表,由于其使用频率很高,要尽量减少表中的记录数量。例如,在功图计产软件中,将油井的计产参数细分为:静态参数表、动态参数表、原油物性表。这样既提高了数据库的访问效率,又提高了软件的可维护性。
2.3 应用“三少”原则
1)数据库中的表越少越好。只有数据库中表的个数少了,才能说明系统的E-R图少而精,去掉了重复的、多余的实体,形成了对客观世界的高度抽象,进行了系统的数据集成;
2)一个表中组合主键的字段个数越少越好。因为主键的作用,一是建立主键索引,二是作为字表的外键,所以组合主键的字段个数少了,不仅节省了运行时间,而且节省了索引存储空间。
3)一个表中的字段个数越少越好。只有字段的个数少了,才能说明在系统中不存在数据重复,且很少有数据冗余,更重要的是督促使用者进行“列变行”,这样就防止了将子表中的字段拉入到主表中去,在主表中留下许 多空余的字段。所谓“列变行”,就是将主表中的一部分内容拉出去,另外单独建一个子表。
2.4、创建索引
索引就是加快检索表中数据的方法。数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库索引具有以下5点优点:
1)创建唯一性索引,保证数据库表中每一行数据的唯一性
2)大大加快数据的检索速度,这也是创建索引的最主要的原因
3)加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
4)在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
5)通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能。
为了提高数据库访问效率,在创建索引时,一定要遵循以下几条原则:
1)表的主键、外键必须有索引;
2)数据量超过300的表应该有索引;
3)经常与其他表进行连接的表,在连接字段上应该建立索引;
4)经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
5)索引应该建在选择性高的字段上;
6)索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;
7)复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:
A、正确选择复合索引中的主列字段,一般是选择性较好的字段;
B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;
C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;
D、如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;
E、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;
8)频繁进行数据操作的表,不要建立太多的索引;
9)删除无用的索引,避免对执行计划造成负面影响;
10)索引分为聚集索引和非聚集索引,应根据具体所需查询条件来建立合适类型的索引。
3、数据库连接方式
传统的数据库连接方式,在动态WEB站点运行时,会频繁的建立和释放连接,降低数据库访问效率,增加系统的负担,成为了软件运行效率的瓶颈。而数据库连接池则是将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接对数据库进行访问。这样省略了创建连接和销毁连接的过程,在性能上得到了提高。
数据库连接池的工作机制为,当服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。
4、数据检索方式
数据检索的优化主要是根本数据库的设计方案和查询条件来设计相应的SQL查询方案,从而减少数据检索时间,提高现有资源的利用率。优化数据检索的方法主要有以下几种:
1)应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描;
2)应尽量避免在 where 子句中使用!=或<>操作符,否則将引擎放弃使用索引而进行全表扫描;
3)应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描;
4)应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描;
5)任何地方都不要使用 select * from t,用具体的字段列表代替“*”,不要返回用不到的任何字段;
6)在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON,在结束时设置 SET NOCOUNT OFF。无需在执行存储过程和触发器的每个语句后向客户端发送 DONE_IN_PROC 消息;
7)尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。
参考文献
[1] 施瓦茨,扎伊采夫,特卡琴科.高性能MySQL.电子工业出版社,2013
关键词:数据库;效率;索引;SQL查询
1、引言
随着公司产品的发展,测试数据数据量的逐渐增大,数据库以其数据共享、数据冗余度低、数据独立性高、数据集中度高和数据一致性及可维护性高的五大优点,已经成为了公司软件进行大量、复杂数据处理的必选工具。因此,如何提高数据库访问效率也就成为了软件设计时需要重要考虑的问题之一,如处理不当,则会导致软件运行速度慢、系统卡死等重大问题。
2、数据库设计
2.1 使用分布式数据库
分布式数据库,顾名思义,也就是数据库中的数据不是存储在同一场地,而是分布存储在多个场地。例如,长庆油田的数字化系统即采用了分布式数据库,由每个站点来管理该站下油井的基础数据和测试数据,然后通过数据同步技术来将本站所管理数据与厂级中心服务器进行数据同步。这种设计方案的优点是,局部应用的响应速度较快,可扩展性好,易于集成现有的系统。如公司要进行大量、多层次的数字化产品安装及系统实施,分布式数据库将是一个很好的数据处理技术方案。
2.2 分类拆分数据量大的表
对于经常使用的数据表,由于其使用频率很高,要尽量减少表中的记录数量。例如,在功图计产软件中,将油井的计产参数细分为:静态参数表、动态参数表、原油物性表。这样既提高了数据库的访问效率,又提高了软件的可维护性。
2.3 应用“三少”原则
1)数据库中的表越少越好。只有数据库中表的个数少了,才能说明系统的E-R图少而精,去掉了重复的、多余的实体,形成了对客观世界的高度抽象,进行了系统的数据集成;
2)一个表中组合主键的字段个数越少越好。因为主键的作用,一是建立主键索引,二是作为字表的外键,所以组合主键的字段个数少了,不仅节省了运行时间,而且节省了索引存储空间。
3)一个表中的字段个数越少越好。只有字段的个数少了,才能说明在系统中不存在数据重复,且很少有数据冗余,更重要的是督促使用者进行“列变行”,这样就防止了将子表中的字段拉入到主表中去,在主表中留下许 多空余的字段。所谓“列变行”,就是将主表中的一部分内容拉出去,另外单独建一个子表。
2.4、创建索引
索引就是加快检索表中数据的方法。数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库索引具有以下5点优点:
1)创建唯一性索引,保证数据库表中每一行数据的唯一性
2)大大加快数据的检索速度,这也是创建索引的最主要的原因
3)加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
4)在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
5)通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能。
为了提高数据库访问效率,在创建索引时,一定要遵循以下几条原则:
1)表的主键、外键必须有索引;
2)数据量超过300的表应该有索引;
3)经常与其他表进行连接的表,在连接字段上应该建立索引;
4)经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
5)索引应该建在选择性高的字段上;
6)索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;
7)复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:
A、正确选择复合索引中的主列字段,一般是选择性较好的字段;
B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;
C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;
D、如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;
E、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;
8)频繁进行数据操作的表,不要建立太多的索引;
9)删除无用的索引,避免对执行计划造成负面影响;
10)索引分为聚集索引和非聚集索引,应根据具体所需查询条件来建立合适类型的索引。
3、数据库连接方式
传统的数据库连接方式,在动态WEB站点运行时,会频繁的建立和释放连接,降低数据库访问效率,增加系统的负担,成为了软件运行效率的瓶颈。而数据库连接池则是将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接对数据库进行访问。这样省略了创建连接和销毁连接的过程,在性能上得到了提高。
数据库连接池的工作机制为,当服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。
4、数据检索方式
数据检索的优化主要是根本数据库的设计方案和查询条件来设计相应的SQL查询方案,从而减少数据检索时间,提高现有资源的利用率。优化数据检索的方法主要有以下几种:
1)应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描;
2)应尽量避免在 where 子句中使用!=或<>操作符,否則将引擎放弃使用索引而进行全表扫描;
3)应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描;
4)应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描;
5)任何地方都不要使用 select * from t,用具体的字段列表代替“*”,不要返回用不到的任何字段;
6)在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON,在结束时设置 SET NOCOUNT OFF。无需在执行存储过程和触发器的每个语句后向客户端发送 DONE_IN_PROC 消息;
7)尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。
参考文献
[1] 施瓦茨,扎伊采夫,特卡琴科.高性能MySQL.电子工业出版社,2013