SQL点滴之性能优化其实没有那么神秘(上)

发表于:2011-8-09 09:39

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

分享:

  5、字段的设计

  字段是数据库最基本的单位,其设计对性能的影响是很大的。需要注意如下:

  ● 数据类型尽量用数字型,数字型的比较比字符型的快很多。

  ● 数据类型尽量小,这里的尽量小是指在满足可以预见的未来需求的前提下的。

  ● 尽量不要允许NULL,除非必要,可以用NOT NULL+DEFAULT代替。

  ● 少用TEXT和IMAGE,二进制字段的读写是比较慢的,而且,读取的方法也不多,大部分情况下最好不用。

  ● 自增字段要慎用,不利于数据迁移。

  6、数据库物理存储和环境的设计

  在设计阶段,可以对数据库的物理存储、操作系统环境、网络环境进行必要的设计,使得我们的系统在将来能适应比较多的用户并发和比较大的数据量。这里需要注意文件组的作用,适用文件组可以有效把I/O操作分散到不同的物理硬盘,提高并发能力。

  7、系统设计

  整个系统的设计特别是系统结构设计对性能是有很大影响的,对于一般的OLTP系统,可以选择C/S结构、三层的C/S结构等,不同的系统结构其性能的关键也有所不同。

  系统设计阶段应该归纳一些业务逻辑放在数据库编程实现,数据库编程包括数据库存储过程、触发器和函数。用数据库编程实现业务逻辑的好处是减少网络流量并可更充分利用数据库的预编译和缓存功能。

  8、索引的设计

  在设计阶段,可以根据功能和性能的需求进行初步的索引设计,这里需要根据预计的数据量和查询来设计索引,可能与将来实际使用的时候会有所区别。

  关于索引的选择,应改主意:

  ● 根据数据量决定哪些表需要增加索引,数据量小的可以只有主键。

  ● 根据使用频率决定哪些字段需要建立索引,选择经常作为连接条件、筛选条件、聚合查询、排序的字段作为索引的候选字段。

  ● 把经常一起出现的字段组合在一起,组成组合索引,组合索引的字段顺序与主键一样,也需要把最常用的字段放在前面,把重复率低的字段放在前面。

  ● 一个表不要加太多索引,因为索引影响插入和更新的速度。

  三、编码阶段

  编码阶段是本文的重点,因为在设计确定的情况下,编码的质量几乎决定了整个系统的质量。

  编码阶段首先是需要所有程序员有性能意识,也就是在实现功能同时有考虑性能的思想,数据库是能进行集合运算的工具,我们应该尽量的利用这个工具,所谓集合运算实际是批量运算,就是尽量减少在客户端进行大数据量的循环操作,而用SQL语句或者存储过程代替。关于思想和意识,很难说得很清楚,需要在编程过程中来体会。

  下面罗列一些编程阶段需要注意的事项:

  1、只返回需要的数据

  返回数据到客户端至少需要数据库提取数据、网络传输数据、客户端接收数据以及客户端处理数据等环节,如果返回不需要的数据,就会增加服务器、网络和客户端的无效劳动,其害处是显而易见的,避免这类事件需要注意:

  A、横向来看,不要写SELECT *的语句,而是选择你需要的字段。

  B、纵向来看,合理写WHERE子句,不要写没有WHERE的SQL语句。

  C、注意SELECT INTO后的WHERE子句,因为SELECT INTO把数据插入到临时表,这个过程会锁定一些系统表,如果这个WHERE子句返回的数据过多或者速度太慢,会造成系统表长期锁定,诸塞其他进程。

  D、对于聚合查询,可以用HAVING子句进一步限定返回的行。

52/5<12345>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号