现在的位置: 首页 > 综合 > 正文

数据库的优化 (Updating)

2013年09月15日 ⁄ 综合 ⁄ 共 1223字 ⁄ 字号 评论关闭

数据库的优化

数据库的优化可以从多方面入手,比如增强硬件配置,优化数据库的设计,优化T-SQL语句的使用,下面我将一一列出:

1. 良好的数据库设计原则必须考虑的问题:

实现sql server数据库的优化,首先要有一个好的数据库设计方案。在实际工作中,许多sql server方案往往是由于数据库设计得不好导致性能很差。

与每个表列相关的数据类型应该反映数据所需的最小存储空间,特别是对于被索引的列更是如此。比如能使用smallint类型就不要用int类型,能用bit类型就不要用smallint类型,这样索引字段便可以被更快地读取,而且可以在一个数据页上放置更多的数据行,因而也就减少了I/O操作。

2. 合理使用索引

索引是数据库中重要的数据结构,它的根本目的就是提高查询效率。索引的使用要恰到好处,其使用原则如下:

在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引;在频繁进行排序或分组(即进行group byorder by操作)的列上建立索引;在条件表达式中经常用到的不同值较多的列上建立索引,在不同值少的列上不要建立索引。比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立索引。

如果建立索引不当不但不会提高查询效率,反而会严重降低更新速度。如果待排序的列有多个,可以在这些列上建立复合索引。

3. 避免相关子查询

如果一个列同时在主查询和where子句中出现,很可能当主查询中的列值改变之后,子查询必须重新查询一次。而且查询嵌套层次越多,效率越低,因此应当尽量避免子查询。如果子查询不可避免,那么要在子查询中过滤掉尽可能多的行。

4. 避免困难的like表达式

like关键字支持通配符匹配,但这种匹配特别耗时。例如:select * from customer where zipcode like 98_ _ _”,即使在zipcode字段上已建立了索引,在这种情况下也还是采用顺序扫描的方式。如果把语句改为:select * from customer where zipcode >98000”,在执行查询时就会利用索引来查询,显然会大大提高速度。

5. 使用临时表加速查询

把许多表的子集汇成一个表进行查询,这个时候我们可以选择创建临时表,有时能加速查询。它有助于避免多重操作,而且在其他方面还能简化优化器的工作。临时表中的行要比主表中的行少,减少了磁盘i/o,所以查询工作量可以得到大幅减少。但要注意,临时表创建后不会反映主表的修改。在主表中数据频繁修改的情况下,注意不要丢失数据。如果对数据量大的数据库进行操作并Generate 报表的时候,我们就可以用临时表来加快查询速度。 

6. With (nolock) 关键字

针对一些Traffic非常高的数据库中的Table,采用with (nolock),可以不添加共享锁和排它锁,提高SQL  Server并发效率,因此对一些实时性要求不高的系统,with (nolock) 是非常重要的。

抱歉!评论已关闭.