SQL Server数据库的整理优化的基本过程(一)

SQL Server 数据库的整理优化的基本过程(一)

高建刚

作为系统的重要一个部分,数据库的性能在系统的运行过程中起到了非常关键的作用,系统的运行过程中,我们经常遇到客户抱怨系统运行的太慢,统计一个月的报表经常会出现超时的情况,面对这些问题,我们应该如何处理哪?程序优化和数据库优化要同步进行,程序方面应该从编写的 T-SQL 语句、数据库的访问引擎、系统的架构设计等方面,当然了 WEB Form 的程序还要考虑到应用服务器以及 IIS 的问题等等,这是个系统架构师的问题,在此不多涉及。对我来说最关心的还是如何从数据库方面来优化数据库,下面就结合我个人的从业经验对数据库的优化做一个简单的介绍。

首先,当我们面对一个数据库时,我们应该从基础慢慢的去整理,使之成为一个基本正常运行的数据库,这其中包含了很多的信息,由于一个系统的开发、实施、调试过程中都有可能会对数据库的正常运行造成一定的影响,所以我们要从基础着手,看看是否是正常运行的数据库,即便这个数据库是非常陌生的,我们也可以慢慢的去整理,以便达到初期的整理优化的效果。

查看是否所有的表都有主键。一个表没有主键会造成各种各样的问题,我们可以通过以下语句:

select NAME

from sysobjects T1

where xtype = 'U'

  AND objectproperty ( object_id ( T1. Name), 'IsUserTable' )= 1

  AND objectproperty ( object_id ( T1. Name), 'TableHasPrimaryKey' )= 0

ORDER BY [NAME]

通过上述语句的执行,我们会发现,数据库中有哪些表没有主键约束,对这些表,要进行分析,增加主键。

下一步,我们来看看聚集索引,相信很多人对于聚集索引造成的性能问题印象已经很深了,几乎涉及到性能两个字的时候,我们就会想到索引这个词。通过下边的语句我们可以找到那些表没有聚集索引:

SELECT NAME

FROM sysobjects T1

WHERE xtype = 'U'

  AND objectproperty ( object_id ( T1. Name), 'IsUserTable' )= 1

  AND objectproperty ( object_id ( T1. Name), 'TableHasClustIndex' )= 1

ORDER BY [NAME]

缺少聚集索引的表,处理的时候要慎重,怎么样建立合适的聚集索引是需要仔细考虑的,有时候,聚集索引建立的不好,会导致索引碎片的频繁增加,最重导致更加失败的性能表现,所以要从应用、表结构、数据产生的顺序等多方面考虑,然后再确定聚集索引的键值,维护好完成聚集索引后,通过实际应用来查看性能是否有所改善。

下一节中,我们将重点关注到索引的优化。

第二节 索引

原文地址:https://www.cnblogs.com/Gaojier/p/2783533.html