第一部分SQL SERVER数据库优化方案微软公司的SQL SERVER 是一个功能完备的数据库管理系统,它提供了完整的关系数据库创建、开发和管理功能。
现社会信息技术的快速发展,对数据库技术的要求也越来越高,SQL SERVER数据库在信息化的过程中得到了广泛的应用。
第一章数据库系统概述从20世纪60年代开始到现在,数据库技术经过了30多年的发展。
在这30多年的历程中,在数据库技术的理论研究和系统开发上取得了辉煌的成就,确立了数据技术在现代计算机系统中不可或缺的地位。
成为现代信息科学与技术的重要组成部分以及计算机数据处理和信息管理系统的核心。
1.1 基本概念与数据库技术密切相关的基本概念包括:数据、数据库、数据库管理系统和数据库系统四大概念。
1.数据(Data)数据是对客观事物的一种描述,是由能被计算机识别与处理的数值、字符等符号构成的集合,即数据是指描述事物的符号记录。
广义地说,数据是一种物理符号的序列,用于记录事物的情况,是对客观事物及其属性进行的一种抽象化及符号化的描述。
数据的概念应包括数据的内容和形式两个方面。
数据的内容是指所描述的客观事物的具体特性,也就是通常所说的数据的“值”;数据的形式则是指数据内容所存储的具体形式,即数据的“类型”。
故此,数据可以用数据类型和值来表示。
2.数据库(Data Base,DB)页脚内容1数据库是指长期存储在计算机内部、有组织的、可共享的数据集合,即在计算机系统中按一定的数据模型组织、存储和使用的相关联的数据集合成为数据库。
数据库中的数据按照一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性、易扩展性、集中性和共享性,以文件的形式存储在存储介质上的。
数据库中的数据由数据库管理系统进行统一管理和控制,用户对数据库进行的各种数据操作都是通过数据库管理系统实现。
3.数据库管理系统(Data Base Management System,DBMS)数据库管理系统是数据库系统的核心,是为数据库的建立、使用和维护而配置的软件,是位于操作系统与用户之间的一层数据管理软件。
主要功能是对数据库进行定义、操作、控制和管理。
1)数据定义数据的定义包括:定义构成数据库结构的外模式、模式和内模式,定义各个外模式和模式之间的映射,定义模式与内模式之间的映射,定义有关的约束条件。
2)数据处理对数据的处理操作主要包括对数据库数据的检索、插入、修改和删除等基本操作。
3)安全管理对数据库的安全管理主要体现在:对数据库进行并发控制、安全性检查、完整性约束条件的检查和执行、数据库的内部维护(如索引、数据字典的自动维护)等。
并且能够管理和监督用户的权限,防止拥护有任何破坏或者恶意的企图。
4)数据的组织、存储和管理负责分类地组织、存储和管理数据库数据,确定以何种文件结构和存取方式物理地组织数据,如何实现数据之间的联系,以便提高存储空间利用以及提高随机查找、顺序查找、增加、删除和查改页脚内容2等操作的时间效率。
5)建立和维护数据库建立数据库包括数据库数据的初始化与数据转换等。
维护数据库包括数据库的转储与恢复、数据库的重组织与重构造、性能的监视与分析等。
6)数据通信接口提供与其他软件系统进行通信的功能。
4.数据库系统(Data Base System,DBS)数据库系统指在计算机系统中引入数据库后的系统构成,一般有数据库、数据库管理系统、应用系统、数据库管理员和用户构成。
1.2 数据库系统的特点数据库系统的点主要有:数据的结构化、高共享性、低冗余度、易扩充、较高的独立性(物理数据独立、逻辑数据独立)以及数据由DBMS统一管理和控制(数据的安全性Security保护、数据的完整性Integrity保护、并发Concurrency控制、数据库恢复Recovery)等。
第二章数据库性能优化数据库作为一种独立的、有组织、的可共享的数据集合,数据的查询访问是数据操作中频度最高的操作。
当数据量和访问频率达到一定程度的时候,系统的响应速度就至关重要了,这时候就需要对数据库数据存储的结构和方式进行优化,使其满足系统需要的访问响应速度。
2.1 性能影响因素常见的影响数据访问速度的因素,有以下几种:页脚内容31.没有索引或者没有用到索引数据库索引就像书籍中目录一样,使用户在访问数据库数据时,不必遍历所有数据就可以找到需要的数据。
创建索引后,可以保证每行数据的唯一性,极大地提高数据检索效率,这是一中牺牲空间换取性能的方法。
没有索引或者没有用到索引是数据访问速度慢最常见的因素,也是程序设计的一个缺陷所在。
2.I/O吞吐量小,形成了瓶颈效应I/O吞吐量是影响数据访问速度的客观因素(硬件因素)。
在一定的硬件环境下,利用优化的部署方案可适当提高I/O吞吐量。
3.没有创建计算列导致查询不优化计算列是一个比较特殊的列,不填写任何设计类型,用户不可以改变该列的值。
计算列的值是通过一定的函数公式等以另一个或多个列的值为输入值计算出的结果。
如果没相应的计算列,在一些数据查询的时候需要对已有数据进行计算,从而浪费一部分性能。
4.内存不足对数据库数据的查询访问毫无疑问会占用大量的内存空间,当内存不足的情况下,数据的访问速度会受到明显的影响甚至访问出现超时情况,是影响数据访问速度的客观因素。
5.网络速度慢网络速度慢是影响数据访问速度的客观因素。
可通过提高网络访问的位宽来解决。
6.查询出的数据量过大当查询出的数据量过大时,内存的占用、系统时间的占用等都影响数据访问的速度。
可以采用多次查询、定位查询、和查询数据量控制来解决。
页脚内容47.锁或者死锁锁或者死锁在数据库数据访问时会造成访问者等待时间过程或者永久无法获取到资源。
这是查询慢最常见的因素之一,是程序设计的缺陷,要尽量避免。
8.返回不必要的行和列在一般的数据查询中,都尽可能多的获取数据信息,这样造成了不必要的数据遍历,大大的增加了数据访问的响应的时间。
所以在一般的查询中,尽量查询少的行和列,将数据遍历时间降到最低以满足数据输出需求。
9.查询语句不够优化在数据查询访问过程中,使用最频繁的是使用自定义的查询语句进行数据输出的。
所以编写优化的查询语句能够很大程度上提高数据查询访问的速度。
2.2 性能优化数据库性能优化主要是提高数据访问的速度,即提高数据库响应速度的性能指标。
性能优化主要分为主观因素和客观因素两部分的优化。
这里主要针对影响性能的客观因素进行优化。
2.2.1 主观因素优化主观因素主要是指服务器的硬件环境。
主要优化有以下几个方面:1、把数据、日志、索引放到不同的I/O设备上,增加读取速度,数据量越大,提高I/O吞吐量越重要;2、纵向、横向分割表,减少表的尺寸(sp_spaceuse);3、升级硬件;页脚内容54、提高网络访问速度;5、扩大服务器的内存;配置虚拟内存:虚拟内存大小应基于计算机上并发运行的服务进行配置,一般设置为物理内存的1.5倍;如果安装了全文检索功能,并打算运行Microsoft 搜索服务以便执行全文索引和查询,可考虑将虚拟内存大小设置为至少计算机中物理内存的3倍;6、增加服务器CPU个数;其中并行处理比串行处理更需要资源。
SQL SERVER根据系统负载情况决定最优的并行等级,复杂的需要消耗大量的CPU的查询适合并行处理。
不过更新操作UPDATE、INSERT、DELETE不能进行并行处理。
2.2.2 客观因素优化客观因素主要指的是由于设计和开发中存在的缺陷和漏洞;主要优化有以下几个方面:1.优化索引(1)根据查询条件建立优化的索引、优化访问方式,限制结果集的数据量。
注意填充因子要适当(最好是使用默认值0)。
索引应该尽量小,使用字节数小的列建里索引(参照索引的创建),不要对有限的几个值的字段建立单一索引(如性别字段)。
(2)如果使用LIKE进行查询的话,简单的使用INDEX是不行的,全文索引又太耗费空间。
LIKE ‘N%’使用索引,LIKE ‘%N’不使用索引。
用LIKE‘%N%’查询时,查询耗时和字段值总长度成正比,所以不能用CHAR类型而采用VARCHAR。
对于字段的值很长的字段建立全文索引。
(3)重建索引DBCC REINDEX,DBCC INDEXDEFRAG,收缩数据和日志DBCC SHRINKDB,DBCC SHRINKFILE。
设置自动收缩日志,对与大的数据库不要设置数据库自动增长,它会降低服务页脚内容6器的性能。
2.数据库部署优化(1)DB SERVER和APPLICATION SERVER分离,OLTP和OLAP分离;(2)使用分区视图。
分布式分区视图可用于实现数据库服务器联合体,联合体是一组分开管理的服务器,他们互相协作分担系统的处理负荷。
A、在实现分区视图之前,必须先水平分区表。
B、在创建成员表后,在每个服务器上定义一个分布式分区视图,并且每个视图具有相同的名称。
这样引用分布式分区视图名的查询可以在任何一个成员服务器上运行。
系统操作如同每个成员服务器都有一个原始表的复本一样,不过每个服务器上其实只有一个成员表和一个分布式分区视图。
数据的位置对应用程序是透明的。
3.查询语句优化T-SQL的写法上有很大的讲究,DBMS处理查询计划的过程是:a、查询语句的词法、语法检查;b、将语句提交给DBMS的查询优化器;c、优化器做代数优化和存取路径的优化;d、由预编译模块生成查询规划;e、在合适的时间提交给系统处理执行;f、将执行结果返回给用户。
(1)COMMIT和ROLLBACK的区别:ROLLBACK回滚所有的事务;COMMIT提交当前的事务。
在动态语句中写事务,请将事务写在外面,如:BEGIN TRAN EXEC(@SQL)COMMIT TRANS 或者将动态SQL写成函数或者存储过程。
(2)在大数据两的查询输出SELECT语句中尽量不要使用自定义函数,调用自定义函数的函数时系统调用是一个迭代过程,很影响查询输出性能的。
在查询字段时尽可能使用小字段两输出,并在WHERE子句或者使用SELECT TOP 10/1 PERCENT来限制返回的记录数,使用SET ROWCOUNT来限制操作的记录数,避免整表扫描。
返回不必要的数据,不但浪费了服务器的I/O资源,加重了网络的负担,如果表很大的话,在表扫描期间将表锁住,禁止其页脚内容7他的联接访问,后过很严重的。
(3)SQL的注释申明对执行查询输出没有任何影响。
(4)使用计算列对数据进行简单计算,尽量避免在查询语句中对数据进行运算。
(5)尽可能不使用光标,它会占用大量的资源。
如果需要ROW-BY-ROW地执行,尽量采用非光标技术,如:客户端循环、临时表、TABLE变量、子查询、CASE语句等等。
(6)使用PROFILER来跟踪查询,得到查询所需的时间,找出SQL的问题所在,用索引优化器优化索引。