当前位置:首页 > 演讲稿 > [浅议SQL,Server数据库的优化] SQL数据库优化
 

[浅议SQL,Server数据库的优化] SQL数据库优化

发布时间:2019-02-23 04:19:53 影响了:

  [摘要]设计一个应用系统似乎并不难,但是要想使系统达到最优化的性能并不是一件容易的事。在开发工具、数据库设计、应用程序的结构、查询设计、接口选择等方面有多种选择,这取决于特定的应用需求以及开发队伍的技能。以SQL Server为例,从后台数据库的角度讨论应用程序性能优化技巧,并且给出一些有益的建议。
  [关键词]SQL Server数据库优化高效索引
  中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)1210114-01
  
  一、使用良好的数据库设计方案
  
  (一)逻辑数据库规范化问题。一般来说,逻辑数据库设计会满足规范化的前3级标准:第1规范:没有重复的组或多值的列;第2规范:每个非关键字段必须依赖于主关键字,不能依赖于一个组合式主关键字的某些组成部分;第3规范:一个非关键字段不能依赖于另一个非关键字段。遵守这些规则的数据库设计会产生较少的列和更多的表,因而也就减少了数据冗余,也减少了用于存储数据的页。
  (二)生成物理数据库。要想正确选择基本物理实现策略,必须了解和利用好数据库访问格式和硬件资源的操作特点,特别是内存和磁盘子系统I/O。以下是一些常用技巧:与每个表列相关的数据类型应该反映数据所需的最小存储空间,特别是对于被索引的列更是如此。用SQLServer段把一个频繁使用的大表分割开,并放在多个单独的智能型磁盘控制器的数据库设备上,这样也可以提高性能。因为有多个磁头在查找,所以数据分离也能提高性能。
  
  二、合理使用索引并简化排序
  
  索引是数据库中重要的数据结构,它的根本目的就是提高查询效率。索引的使用要恰到好处,其使用原则如下:在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引;在频繁进行排序或分组(即进行groupby或orderby操作)的列上建立索引;在条件表达式中经常用到的不同值较多的列上建立索引,在不同值少的列上不要建立索引。比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立索引。如果建立索引不但不会提高查询效率,反而会严重降低更新速度。如果待排序的列有多个,可以在这些列上建立复合索引。
  在数据库应用设计阶段应当尽量简化或避免对大型表进行重复的排序。当能够利用索引自动以适当的次序产生输出时,优化器就避免了排序这个步骤。为了避免不必要的排序,就要正确地增建索引,合理地合并数据库表(尽管有时可能影响表的规范化,但相对于效率的提高是值得的)。如果排序不可避免,那么应当试图简化它,如缩小排序的列的范围等。
  
  三、设计高效的查询
  
  1.如果有独特的索引,那么带有“=”操作符的WHERE子句性能最好,其次是封闭的区间(范围),再其次是开放的区间。
  2.从数据库访问的角度看,含有不连续连接词(OR和IN)的WHERE子句一般来说性能不会太好。所以,优化器可能会采用R策略,这种策略会生成1个工作表,其中含有每个可能匹配的执行的标识符,优化器把这些行标志符(页号和行号)看做是指向1个表中匹配的行的“动态索引”。优化器只需扫描工作表,取出每一个行标志符,再从数据表中取得相应的行,所以R策略的代价是生成工作表。
  3.包含NOT、<>、或!=的WHERE子句对于优化器的索引选择来说没有什么用处。因为这样的子句是排斥性的,而不是包括性的,所以在扫描整个原来数据表之前无法确定子句的选择性。
  4.限制数据转换和串操作,优化器一般不会根据WHERE子句中的表达式和数据转换式生成索引选择。例如:
  paycheck * 12>36000 or substring(lastname,1,1)=“L”
  如果该表建立了针对paycheck和lastname的索引,就不能利用索引进行优化,可以改写上面的条件表达式为:
  paycheck

猜你想看
相关文章

Copyright © 2008 - 2022 版权所有 职场范文网

工业和信息化部 备案号:沪ICP备18009755号-3