数据库优化方面表设计sql优化

合集下载

数据库设计对SQL Server数据库性能优化分析

数据库设计对SQL Server数据库性能优化分析

数据库设计对SQL Server数据库性能优化分析在当今数字化的时代,数据的管理和处理对于企业和组织的运营至关重要。

SQL Server 作为一种广泛使用的关系型数据库管理系统,其性能优化是确保系统高效运行的关键。

而数据库设计作为性能优化的基础,对于提高 SQL Server 数据库的性能起着决定性的作用。

一、数据库设计的重要性一个良好的数据库设计能够为数据库的性能优化奠定坚实的基础。

它不仅影响着数据的存储和检索效率,还关系到数据库的可维护性、可扩展性以及数据的完整性和一致性。

如果数据库设计不合理,可能会导致数据冗余、查询性能低下、数据不一致等问题,从而严重影响系统的整体性能。

例如,如果在设计表结构时没有合理地规划字段的数据类型和长度,可能会导致存储空间的浪费或者数据截断的错误。

此外,如果没有正确地建立表之间的关系,可能会导致数据的完整性无法得到保证,从而影响数据的准确性和可靠性。

二、数据库设计对性能的影响1、表结构设计字段选择与数据类型:选择合适的数据类型对于节省存储空间和提高查询性能非常重要。

例如,对于整数类型的数据,如果使用了过大的数据类型,会浪费存储空间;而对于字符串类型的数据,如果长度估计不准确,可能会导致数据截断或者存储空间的浪费。

字段长度:合理设置字段长度可以避免不必要的存储空间浪费。

同时,过短的字段长度可能无法容纳实际的数据,导致数据截断。

主键和索引:主键的选择应该具有唯一性和稳定性。

合适的索引可以大大提高查询和连接操作的性能,但过多或不合理的索引也会导致性能下降,因为每次数据插入、更新和删除时都需要维护索引。

2、数据规范化第一范式(1NF):确保每个字段都是原子性的,即不可再分。

第二范式(2NF):在满足 1NF 的基础上,消除部分依赖,即非主键字段完全依赖于主键。

第三范式(3NF):在满足 2NF 的基础上,消除传递依赖。

适当的数据规范化可以减少数据冗余,提高数据的一致性和完整性,但过度规范化可能会导致查询时需要进行大量的连接操作,从而影响性能。

sql优化常用面试题

sql优化常用面试题

sql优化常用面试题SQL优化是数据库开发和维护中非常重要的一项工作。

在面试过程中,面试官通常会提出一些与SQL优化相关的问题,以下是一些常见的SQL优化面试题:1. 如何进行SQL优化?SQL优化可以通过以下几个方面实现:1.1. 索引优化:合理创建索引并保证索引的使用;1.2. 查询优化:使用合适的查询语句、减少不必要的查询、优化查询条件和排序等;1.3. 数据库设计优化:合理设计数据库结构,避免冗余字段和表,减少数据的存储和检索;1.4. 优化表结构:适当分割数据表,避免表过大,减少数据操作的时间;1.5. SQL语句优化:合理编写SQL语句,避免使用子查询、JOIN 操作等可能导致性能下降的语句。

2. 什么是索引?为什么要使用索引?索引是一种数据结构,用于加快数据库的检索速度。

通过将特定列上的索引值与实际数据进行映射,可以快速定位到包含指定数据的记录,提高查询效率。

索引的使用可以带来以下优点:- 加快数据检索速度:通过索引,数据库可以直接访问到符合查询条件的数据,加快查询速度;- 提高查询性能:索引可以减少数据库的扫描操作,降低系统资源的占用;- 支持唯一性约束:通过创建唯一索引,可以确保数据表中某些列的唯一性;- 支持排序:通过创建排序索引,可以直接按照索引顺序返回数据。

3. 什么是SQL执行计划?SQL执行计划是数据库执行SQL语句时生成的一种执行计划,用于指导数据库如何执行SQL查询。

执行计划是由数据库的查询优化器生成的,它会根据表结构、索引情况等因素评估查询的成本,并生成一种最优的执行计划。

SQL执行计划包括了查询语句的扫描方式、连接类型、索引使用情况等信息,有助于分析查询的性能瓶颈以及优化性能。

4. 如何通过查看SQL执行计划来进行优化?通过查看SQL执行计划,可以获取查询语句的执行细节,从而进行性能优化。

4.1. 扫描方式优化:通过查看执行计划中的扫描方式,可以了解查询是如何扫描表的(全表扫描、索引扫描等),针对不同的扫描方式,可以针对性地进行优化,如创建合适的索引、优化查询条件等。

如何进行SQL调优

如何进行SQL调优

如何进行SQL调优SQL调优是优化数据库性能的一个重要步骤。

通常情况下,优化SQL查询的效率会使整个系统的性能得到提升。

在这篇文章中,我们将探讨如何进行SQL调优。

一、分析SQL语句首先,我们需要分析SQL查询语句。

如果SQL查询不正确或不充分,则不可能实现有效的调优。

我们需要了解查询的目的、查询的表、所需的数据以及查询的条件等等。

在分析查询语句时,我们需要关注以下几个方面:1.查询完成的时间是否满足需求;2.过滤条件是否合适;3.表之间的关系是否正确;4.是否使用了合适的索引;5.查询中使用了哪些函数;6.是否将复杂的查询分解为简单的查询;7.是否存在重复数据;8.是否使用了动态语句。

二、优化数据表结构第二个优化策略是优化数据表结构。

优化数据表结构可以使查询更快并减少查询时间。

以下是一些优化数据表结构的建议:1.将表拆分为更小的表;2.对于大型的表,可以使查询更快,更好地维护和管理;3.添加数据到表中时,使用批量插入而不是单独插入;4.为表的主键添加索引;5.使用适当的数据类型;6.删除不必要的列;7.标准化表设计。

三、使用优化查询技术第三个优化策略是使用优化查询技术。

以下是一些优化查询技术的建议:1.使用预编译语句;2.使用存储过程;3.将大的表拆分为小表;4.优化查询过程中使用的函数;5.范围查询的优化技术;6.优化复杂查询;7.熟悉查询缓存的工作原理;8.使用正确的JOIN语句。

四、使用合适的索引使用合适的索引是第四个优化策略。

索引是用于查找表中数据的一种结构。

以下是一些使用索引的建议:1.只有在需要时才使用索引;2.使用准确性为索引提供数据;3.使用索引可以使查询更快,但也会增加插入和修改的时间;4.对于大型表,使用索引可以显著提高性能;5.使用覆盖索引;6.避免使用不规范的索引;7.使用联合索引;8.使用优化查询缓存。

五、优化数据库服务器优化数据库服务器是第五个优化策略。

以下是一些优化服务器的建议:1.选择正确的硬件;2.选择正确的操作系统;3.使用正确的配置参数;4.配置正确的缓存大小;5.使用内存表代替磁盘表;6.合理设置自动增量字段;7.优化写和读的优化区域;8.备份和压缩数据。

数据库性能调优与SQL调整方案

数据库性能调优与SQL调整方案

数据库性能调优与SQL调整方案在今天的信息时代中,数据库是许多企业关键的数据存储和处理工具。

为了确保数据库系统的高效运行和响应时间,数据库性能调优是至关重要的。

本文将介绍数据库性能调优的基本概念,并提供一些建议的SQL调整方案,帮助优化数据库系统的性能。

一、数据库性能调优的概念数据库性能调优是指对数据库系统的硬件、软件以及相关应用程序进行综合优化,以提高数据库系统的响应和处理能力,提升数据库系统的性能。

数据库性能调优的目标是通过优化数据库的结构、查询语句和系统参数等来提高数据库的效率,减少系统的资源消耗,提升用户的体验。

二、数据库性能调优的原则1.合理设计数据库结构:合理的数据库设计是数据库性能调优的基础。

需要关注表的大小、索引的使用、数据模型的规范化和冗余等,以确保数据库结构的高效性和易维护性。

2.优化SQL查询语句:提高SQL查询语句的效率可以极大地改善数据库系统的性能。

使用索引、避免全表扫描、避免使用复杂的子查询和联合查询,以及减少SQL查询语句的执行次数等,都是优化SQL查询语句的常用方法。

3.优化系统参数设置:根据数据库的性能需求,合理设置数据库系统的参数。

例如,调整内存分配、缓存设置、并发连接数、日志文件大小等,以提高数据库系统的性能和稳定性。

三、SQL调整方案1.使用合适的索引:索引在数据库查询中起着重要的作用,可以快速定位数据。

正确选择索引类型、建立合适的复合索引以及定期更新索引等,都是优化SQL查询的有效手段。

2.避免全表扫描:全表扫描是一种效率较低的数据检索方法,应尽量避免使用。

可以利用索引和适当的查询条件,增加筛选条件,提高查询效率。

3.尽量减少数据库访问次数:通过合并多个查询语句、使用批量操作等方式,减少数据库系统的访问次数,可以有效地提高数据库的处理能力和响应时间。

4.避免使用过多的函数:在查询语句中使用函数会增加数据库的负担和计算成本。

可以尝试将一些函数的计算操作移至应用程序层面进行处理,减轻数据库的负担。

使用PostgreSQL进行高性能数据库设计与优化

使用PostgreSQL进行高性能数据库设计与优化

使用PostgreSQL进行高性能数据库设计与优化引言:在当今信息时代,数据的存储和管理变得越来越重要。

作为一种强大的关系型数据库管理系统,PostgreSQL在高性能数据库设计与优化方面拥有丰富的经验和技术。

本文将探讨如何使用PostgreSQL进行高性能数据库设计与优化。

一、数据库设计数据库设计是构建高性能数据库的基础。

在设计数据库时,需要考虑以下几个方面:1. 数据库范式化范式化是一种规范化的数据库设计方法,可以减少数据冗余,提高数据的一致性和完整性。

在设计过程中,应根据实际需求选择合适的范式化级别,并进行适当的冗余处理。

2. 索引设计索引是提高数据库查询性能的关键。

在设计索引时,应根据查询频率和数据更新频率进行权衡。

过多的索引会增加数据更新的负担,而过少的索引会降低查询性能。

因此,需要根据实际情况选择合适的索引策略。

3. 数据库分区数据库分区是将大型数据库分割为多个较小的部分,以提高查询性能和数据管理的效率。

在设计分区方案时,需要考虑数据的访问模式、数据量以及硬件资源等因素。

二、查询优化查询优化是提高数据库性能的关键。

PostgreSQL提供了丰富的查询优化工具和技术,以下是一些常用的优化方法:1. 使用合适的查询语句合理选择查询语句可以减少不必要的计算和数据传输,提高查询效率。

在编写查询语句时,应尽量避免使用复杂的子查询和多重连接,同时合理使用分组、排序和限制等操作。

2. 使用合适的索引索引是提高查询性能的关键。

在使用索引时,应根据查询的字段和条件选择合适的索引类型。

同时,定期对索引进行优化和维护,以保证其性能和稳定性。

3. 数据预取和缓存PostgreSQL提供了数据预取和缓存机制,可以提高查询效率。

通过合理设置缓存大小和预取策略,可以减少磁盘IO次数,提高数据访问速度。

三、并发控制并发控制是保证数据库性能和数据一致性的重要手段。

以下是一些常用的并发控制方法:1. 事务管理PostgreSQL支持ACID事务,可以保证数据的一致性和完整性。

当sqlserver数据量很大时,如何优化表格能加快处理速度

当sqlserver数据量很大时,如何优化表格能加快处理速度

表设计和查询的一些参考1.合理使用索引索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率。

现在大多数的数据库产品都采用IBM最先提出的ISAM索引结构。

索引的使用要恰到好处,其使用原则如下:●在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引。

●在频繁进行排序或分组(即进行group by或order by操作)的列上建立索引。

●在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。

比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立索引。

如果建立索引不但不会提高查询效率,反而会严重降低更新速度。

●如果待排序的列有多个,可以在这些列上建立复合索引(compound index)。

● 使用系统工具。

如Informix数据库有一个tbcheck工具,可以在可疑的索引上进行检查。

在一些数据库服务器上,索引可能失效或者因为频繁操作而使得读取效率降低,如果一个使用索引的查询不明不白地慢下来,可以试着用tbcheck工具检查索引的完整性,必要时进行修复。

另外,当数据库表更新大量数据后,删除并重建索引可以提高查询速度。

2.避免或简化排序应当简化或避免对大型表进行重复的排序。

当能够利用索引自动以适当的次序产生输出时,优化器就避免了排序的步骤。

以下是一些影响因素:●索引中不包括一个或几个待排序的列;●group by或order by子句中列的次序与索引的次序不一样;●排序的列来自不同的表。

为了避免不必要的排序,就要正确地增建索引,合理地合并数据库表(尽管有时可能影响表的规范化,但相对于效率的提高是值得的)。

如果排序不可避免,那么应当试图简化它,如缩小排序的列的范围等。

3.消除对大型表行数据的顺序存取在嵌套查询中,对表的顺序存取对查询效率可能产生致命的影响。

比如采用顺序存取策略,一个嵌套3层的查询,如果每层都查询1000行,那么这个查询就要查询10亿行数据。

数据库性能优化中的IO调优技术

数据库性能优化中的IO调优技术

数据库性能优化中的IO调优技术数据库是现代应用系统中重要的数据存储和管理工具之一。

然而,随着业务的扩展和数据的增长,数据库的性能问题愈发显著。

其中最关键的问题之一就是IO性能瓶颈。

IO(输入/输出)操作是数据库中时间消耗最大的部分之一,因此进行IO调优对于提高数据库的性能至关重要。

本文将介绍数据库性能优化中的IO调优技术。

一、表设计和索引优化在进行IO调优之前,我们首先要确保表的设计和索引的优化。

合理的表设计和索引可以减少IO操作的次数,从而提高数据库的性能。

具体的优化策略包括:1. 使用适当的数据类型:对于某些字段,选择合适的数据类型可以降低存储空间和IO操作的需求,例如使用整型代替字符型。

2. 正确使用索引:根据查询需求选择合适的索引,并确保索引的选择覆盖了常用的查询条件。

同时,避免创建不必要的索引,因为索引会增加插入和更新操作的开销。

3. 数据库分区:对于大型数据库,可以考虑将数据按照某种规则进行分区,以减少单个表上的IO操作。

例如按照时间范围、地理位置等对数据进行分区。

二、磁盘子系统的优化磁盘子系统是数据库IO性能的关键因素之一。

以下是一些优化磁盘子系统的技术:1. RAID级别选择:RAID技术可以提高磁盘的容错性和性能。

根据对读写性能和容错性的需求,选择合适的RAID级别。

例如,RAID 0提供了较高的性能但没有容错能力,而RAID 5提供了较好的性能和容错能力。

2. 磁盘分区和文件系统:合理的磁盘分区和文件系统设置可以提高IO性能。

将数据库日志、数据文件和临时文件等分开保存在不同的磁盘分区上,以减少IO竞争。

同时选择高性能的文件系统,如XFS、Ext4等。

3. 内存缓存:数据库的内存缓存可以降低磁盘IO的频率。

通过合理设置数据库缓存大小,尽量将频繁访问的数据保留在内存中,减少IO操作。

4. 数量和速度:增加磁盘数量和使用高速磁盘(如SSD)都可以提高数据库的IO性能。

使用磁盘阵列技术可以增加磁盘吞吐量,同时使用高速缓存设备如SSD也可以加速数据库的IO操作。

SQLServer数据库的性能优化

SQLServer数据库的性能优化

SQLServer数据库的性能优化随着企业数据量不断增长,数据库系统已经成为企业不可或缺的一部分。

随之而来的问题是,在应对海量数据的同时,如何保证数据库系统的高效运行,以满足业务需要。

而数据库性能优化就是为了解决这一问题而存在的。

但是,由于SQLServer数据库系统具有复杂性和高度的可配置性,使得数据库性能优化成为了非常复杂的工作。

如果我们没有足够的知识与技巧,很容易导致不经意间影响数据库系统的正常工作。

本文将介绍SQLServer数据库性能优化的关键点。

1. 容量规划在数据库性能优化的开始阶段,我们需要明确数据库的容量规划,该规划应该包含这些内容:- 确认数据库的大小和增长趋势;- 选择合适的服务器硬件配置;- 选择合适的存储设备和存储配置;- 确认数据库备份和还原方案。

当确认好这些规划后,我们可以愉快地开启数据库系统的优化之旅了。

2. 关注I/O操作I/O操作是数据库性能优化中最重要的因素之一。

在SQLServer 中,我们需要通过以下几点来关注IO操作:- 确认合适的RAID配置;- 选择合适的磁盘类型;- 确认合适的磁盘块大小。

对于I/O操作的优化,我们可以在两个方面进行,一个是硬件方面,另一个则是SQLServer配置。

硬件方面,我们需要考虑到一下几个方面:- 升级服务器硬件设备;- 将磁盘储存设备升级为SSD硬盘;- 增加内存的容量。

对于SQLServer的配置,则可以通过以下几点进行:- 合适的磁盘和RAID配置;- 合适的max degree of parallelism 配置;- 合适的max server memory配;3. 使用合适的索引在SQLServer中,索引的作用是加速数据查询和数据修改,从而提高整个数据库系统的运行效率。

而在使用索引时,我们需要特别注意这些要素:- 创建索引可以减少IO操作;- 索引优化的关键点是选择合适的包含数据条目最多的列;- 在大型多元素表中使用Clustered Index;- 对于包含大量重复元素的列,可以直接采用非聚集索引。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

关于数据库优化方面的文章很多,但是有的写的似是而非,有的不切实际,对一个数据库来说,只能做到更优,不可能最优,并且由于实际需求不同,优化方案还是有所差异,根据实际需要关心的方面(速度、存储空间、可维护性、可拓展性)来优化数据库,而这些方面往往又是相互矛盾的,下面结合网上的一些看法和自己的一些观点做个总结。

一个系统的性能的提高,不单单是试运行或者维护阶段的性能调优,也不单单是开发阶段的事情,而是在整个软件生命周期都需要注意。

所以我希望按照软件生命周期的不同阶段来总结数据库性能优化相关的注意事项。

一、分析阶段一般来说,在系统分析阶段往往有太多需要关注的地方,系统各种功能性、可用性、可靠性、安全性需求往往吸引了我们大部分的注意力,但是,我们必须注意,性能是很重要的非功能性需求,必须根据系统的特点确定其实时性需求、响应时间的需求、硬件的配置等。

最好能有各种需求的量化的指标。

另一方面,在分析阶段应该根据各种需求区分出系统的类型,大的方面,区分是OLTP(联机事务处理系统)和OLAP(联机分析处理系统)。

二、设计阶段设计阶段可以说是以后系统性能的关键阶段,在这个阶段,有一个关系到以后几乎所有性能调优的过程—数据库设计。

在数据库设计完成后,可以进行初步的索引设计,好的索引设计可以指导编码阶段写出高效率的代码,为整个系统的性能打下良好的基础。

以下是性能要求设计阶段需要注意的:1、数据库逻辑设计的规范化数据库逻辑设计的规范化就是我们一般所说的范式,我们可以这样来简单理解范式:第1规范:没有重复的组或多值的列,这是数据库设计的最低要求。

第2规范: 每个非关键字段必须依赖于主关键字,不能依赖于一个组合式主关键字的某些组成部分。

消除部分依赖,大部分情况下,数据库设计都应该达到第二范式。

第3规范: 一个非关键字段不能依赖于另一个非关键字段。

消除传递依赖,达到第三范式应该是系统中大部分表的要求,除非一些特殊作用的表。

更高的范式要求这里就不再作介绍了,个人认为,如果全部达到第二范式,大部分达到第三范式,系统会产生较少的列和较多的表,因而减少了数据冗余,也利于性能的提高。

2、合理的冗余完全按照规范化设计的系统几乎是不可能的,除非系统特别的小,在规范化设计后,有计划地加入冗余是必要的。

冗余可以是冗余数据库、冗余表或者冗余字段,不同粒度的冗余可以起到不同的作用。

冗余可以是为了编程方便而增加,也可以是为了性能的提高而增加。

从性能角度来说,冗余数据库可以分散数据库压力,冗余表可以分散数据量大的表的并发压力,也可以加快特殊查询的速度,冗余字段可以有效减少数据库表的连接,提高效率。

3、主键的设计主键是必要的,SQL SERVER的主键同时是一个唯一索引,而且在实际应用中,我们往往选择最小的键组合作为主键,所以主键往往适合作为表的聚集索引。

聚集索引对查询的影响是比较大的,这个在下面索引的叙述。

在有多个键的表,主键的选择也比较重要,一般选择总的长度小的键,小的键的比较速度快,同时小的键可以使主键的B树结构的层次更少。

主键的选择还要注意组合主键的字段次序,对于组合主键来说,不同的字段次序的主键的性能差别可能会很大,一般应该选择重复率低、单独或者组合查询可能性大的字段放在前面。

4、外键的设计外键作为数据库对象,很多人认为麻烦而不用,实际上,外键在大部分情况下是很有用的,理由是:外键是最高效的一致性维护方法,数据库的一致性要求,依次可以用外键、CHECK约束、规则约束、触发器、客户端程序,一般认为,离数据越近的方法效率越高。

谨慎使用级联删除和级联更新,级联删除和级联更新作为SQL SERVER 2000当年的新功能,在2005作了保留,应该有其可用之处。

我这里说的谨慎,是因为级联删除和级联更新有些突破了传统的关于外键的定义,功能有点太过强大,使用前必须确定自己已经把握好其功能范围,否则,级联删除和级联更新可能让你的数据莫名其妙的被修改或者丢失。

从性能看级联删除和级联更新是比其他方法更高效的方法。

5、字段的设计字段是数据库最基本的单位,其设计对性能的影响是很大的。

需要注意如下:A、数据类型尽量用数字型,数字型的比较比字符型的快很多。

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

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

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

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

6、数据库物理存储和环境的设计在设计阶段,可以对数据库的物理存储、操作系统环境、网络环境进行必要的设计,使得我们的系统在将来能适应比较多的用户并发和比较大的数据量。

这里需要注意文件组的作用,适用文件组可以有效把I/O操作分散到不同的物理硬盘,提高并发能力。

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

系统设计阶段应该归纳一些业务逻辑放在数据库编程实现,数据库编程包括数据库存储过程、触发器和函数。

用数据库编程实现业务逻辑的好处是减少网络流量并可更充分利用数据库的预编译和缓存功能。

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

关于索引的选择,应改主意:A、根据数据量决定哪些表需要增加索引,数据量小的可以只有主键。

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

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

D、一个表不要加太多索引,因为索引影响插入和更新的速度三、编码阶段编码阶段是本文的重点,因为在设计确定的情况下,编码的质量几乎决定了整个系统的质量。

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

关于思想和意识,很难说得很清楚,需要在编程过程中来体会。

下面罗列一些编程阶段需要注意的事项:1、只返回需要的数据返回数据到客户端至少需要数据库提取数据、网络传输数据、客户端接收数据以及客户端处理数据等环节,如果返回不需要的数据,就会增加服务器、网络和客户端的无效劳动,其害处是显而易见的,避免这类事件需要注意:A、横向来看,不要写SELECT *的语句,而是选择你需要的字段。

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

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

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

2、尽量少做重复的工作这一点和上一点的目的是一样的,就是尽量减少无效工作,但是这一点的侧重点在客户端程序,需要注意的如下:A、控制同一语句的多次执行,特别是一些基础数据的多次执行是很多程序员很少注意的。

B、减少多次的数据转换,也许需要数据转换是设计的问题,但是减少次数是程序员可以做到的。

C、杜绝不必要的子查询和连接表,子查询在执行计划一般解释成外连接,多余的连接表带来额外的开销。

D、合并对同一表同一条件的多次UPDATE,比如UPDATE EMPLOYEE SET FNAME=’HAIWER’WHERE EMP_ID=’VPA 30890F’UPDATE EMPLOYEE SET LNAME=’YANG’WHERE EMP_ID=’VPA30890F’这两个语句应该合并成以下一个语句UPDATE EMPLOYEE SET FNAME=’HAIWER’,LNAME=’YANG’WHERE EMP_ID=’VPA30890F’E、UPDATE操作不要拆成DELETE操作+INSERT操作的形式,虽然功能相同,但是性能差别是很大的。

F、不要写一些没有意义的查询,比如SELECT * FROM EMPLOYEE WHERE 1=23、注意事务和锁事务是数据库应用中和重要的工具,它有原子性、一致性、隔离性、持久性这四个属性,很多操作我们都需要利用事务来保证数据的正确性。

在使用事务中我们需要做到尽量避免死锁、尽量减少阻塞。

具体以下方面需要特别注意:A、事务操作过程要尽量小,能拆分的事务要拆分开来。

B、事务操作过程不应该有交互,因为交互等待的时候,事务并未结束,可能锁定了很多资源。

C、事务操作过程要按同一顺序访问对象。

D、提高事务中每个语句的效率,利用索引和其他方法提高每个语句的效率可以有效地减少整个事务的执行时间。

E、尽量不要指定锁类型和索引,SQL SERVER允许我们自己指定语句使用的锁类型和索引,但是一般情况下,SQL SERVER优化器选择的锁类型和索引是在当前数据量和查询条件下是最优的,我们指定的可能只是在目前情况下更有,但是数据量和数据分布在将来是会变化的。

F、查询时可以用较低的隔离级别,特别是报表查询的时候,可以选择最低的隔离级别(未提交读)。

4、注意临时表和表变量的用法在复杂系统中,临时表和表变量很难避免,关于临时表和表变量的用法,需要注意:A、如果语句很复杂,连接太多,可以考虑用临时表和表变量分步完成。

B、如果需要多次用到一个大表的同一部分数据,考虑用临时表和表变量暂存这部分数据。

C、如果需要综合多个表的数据,形成一个结果,可以考虑用临时表和表变量分步汇总这多个表的数据。

D、其他情况下,应该控制临时表和表变量的使用。

E、关于临时表和表变量的选择,很多说法是表变量在内存,速度快,应该首选表变量,但是在实际使用中发现,这个选择主要考虑需要放在临时表的数据量,在数据量较多的情况下,临时表的速度反而更快。

F、关于临时表产生使用SELECT INTO和CREATE TABLE + INSERT INTO的选择,我们做过测试,一般情况下,SELECT INTO会比CREATE TABLE + INSERT INTO的方法快很多,但是SELECT INTO会锁定TEMPDB的系统表SYSOBJECTS、SYSINDEXES、SYSCOLUMNS,在多用户并发环境下,容易阻塞其他进程,所以我的建议是,在并发系统中,尽量使用CREATE TABLE + INSERT INTO,而大数据量的单个语句使用中,使用SELECT INTO。

相关文档
最新文档