SQLserver数据库优化
关于SQLSERVER高并发解决方案

关于SQLSERVER高并发解决方案在现代数据驱动的应用程序中,高并发性是一个常见的挑战。
高并发指的是系统同时有许多用户在相同或类似的时间下对数据库进行读写操作。
高并发性可能导致许多问题,包括响应时间延迟、死锁、死活锁以及数据不一致等。
为了解决这些问题,我们需要采取一些措施来提高SQLSERVER的性能和并发能力。
下面是一些SQLSERVER高并发解决方案:1.优化数据库设计:一个优化的数据库结构可以帮助减少锁资源的争夺。
确保表之间的关系和主键/外键约束正确并且合理。
避免使用不必要的联接,尽量使用简单的查询。
2.索引优化:在适当的列上创建索引,可以大大提高查询效率。
然而,太多的索引也会导致性能下降,因此需要权衡创建索引的数量和每个表上索引的列数。
3.正确使用事务:事务可以保证数据库的一致性,但是要正确使用事务。
尽量减少事务的长度和范围,避免长时间占用锁资源。
4.合理的并发控制机制:SQLSERVER提供了多种并发控制机制,如锁、事务隔离级别等。
根据应用场景选择适当的并发控制机制,提高系统并发性能。
5.数据分区:将大表进行分区,可以减少表的锁资源争夺,提高查询性能。
分区可以根据时间、地理位置等进行划分。
6. 缓存查询结果:缓存常用查询结果,以避免频繁的查询数据库。
可以使用内存数据库如Redis进行结果缓存。
7.采用读写分离:将读写操作分离,主库负责写入操作,从库负责读取操作。
读写分离可以提高系统的并发能力。
8.利用SQLSERVER的内置性能优化工具:SQLSERVER提供了一些性能优化工具,如查询优化器、索引调整等。
通过使用这些工具,可以提高数据库的性能。
9.使用数据库连接池:数据库连接池可以管理和优化数据库连接,提高应用程序的性能。
连接池可以重用已经建立的连接,从而减少连接数据库的开销。
10.使用分布式数据库:对于高并发的情况,可以考虑使用分布式数据库架构。
分布式数据库可以将数据分布到多个节点上,提高系统的并发能力。
SQLServer数据库性能调优技巧

SQLServer数据库性能调优技巧第一章:SQLServer数据库性能调优概述SQLServer是一种常用的关系型数据库管理系统,在大型企业和云计算环境中广泛应用。
为了确保数据库的高性能和可靠性,进行数据库性能调优非常重要。
本章将介绍SQLServer数据库性能调优的概念和目标。
1.1 数据库性能调优的概念数据库性能调优是指通过分析和优化数据库的结构、查询、索引、存储和配置等方面的问题,以提高数据库系统的效率和性能。
优化数据库性能可以显著提升数据的访问速度、减少系统响应时间和提高数据库的处理能力。
1.2 数据库性能调优的目标数据库性能调优的主要目标是提高数据库的运行效率和用户的体验,具体目标包括:- 提高数据的访问速度:通过合理的查询优化和索引设计,加快数据的检索速度。
- 减少系统响应时间:通过调整数据库配置、优化SQL 查询和提高硬件性能等措施,缩短系统响应时间。
- 提高数据库的处理能力:通过合理的分区设计、并行处理和负载均衡等措施,提高数据库的并发处理能力。
第二章:SQLServer数据库性能调优基础在进行SQLServer数据库性能调优之前,有几个基础概念需要了解,包括数据库的结构、查询执行计划和索引等。
2.1 数据库的结构SQLServer数据库由多个表组成,每个表由多个行和列组成。
表有一定的关系,通过主键和外键来建立关联。
了解数据库的结构对于进行性能调优非常重要。
2.2 查询执行计划查询执行计划是SQLServer数据库执行查询语句时的执行路径和操作过程的详细描述。
通过分析查询执行计划,可以找到潜在的性能问题,并进行相应的优化。
2.3 索引索引是一种特殊的数据库对象,用于加快查询速度。
常见的索引类型包括聚集索引、非聚集索引和全文索引等。
合理设计索引可以提高查询的性能。
第三章:SQLServer数据库性能调优技巧本章将介绍一些常用的SQLServer数据库性能调优技巧,包括查询优化、索引优化、配置优化和硬件优化等。
SQLServer查询速度慢原因及优化方法

SQLServer查询速度慢原因及优化⽅法原⽂地址:SQL Server数据库查询速度慢的原因有很多,常见的有以下⼏种:1、没有索引或者没有⽤到索引(这是查询慢最常见的问题,是程序设计的缺陷)2、I/O吞吐量⼩,形成了瓶颈效应。
3、没有创建计算列导致查询不优化。
4、内存不⾜5、⽹络速度慢6、查询出的数据量过⼤(可以采⽤多次查询,其他的⽅法降低数据量)7、锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)8、sp_lock,sp_who,活动的⽤户查看,原因是读写竞争资源。
9、返回了不必要的⾏和列10、查询语句不好,没有优化●可以通过以下⽅法来优化查询 :1、把数据、⽇志、索引放到不同的I/O设备上,增加读取速度,以前可以将Tempdb应放在RAID0上,SQL2000不在⽀持。
数据量(尺⼨)越⼤,提⾼I/O越重要。
2、纵向、横向分割表,减少表的尺⼨(sp_spaceuse)3、升级硬件4、根据查询条件,建⽴索引,优化索引、优化访问⽅式,限制结果集的数据量。
注意填充因⼦要适当(最好是使⽤默认值0)。
索引应该尽量⼩,使⽤字节数⼩的列建索引好(参照索引的创建),不要对有限的⼏个值的字段建单⼀索引如性别字段。
5、提⾼⽹速。
6、扩⼤服务器的内存,Windows 2000和SQL server 2000能⽀持4-8G的内存。
配置虚拟内存:虚拟内存⼤⼩应基于计算机上并发运⾏的服务进⾏配置。
运⾏ Microsoft SQL Server? 2000时,可考虑将虚拟内存⼤⼩设置为计算机中安装的物理内存的1.5倍。
如果另外安装了全⽂检索功能,并打算运⾏Microsoft搜索服务以便执⾏全⽂索引和查询,可考虑:将虚拟内存⼤⼩配置为⾄少是计算机中安装的物理内存的3倍。
将SQL Server max server memory服务器配置选项配置为物理内存的1.5倍(虚拟内存⼤⼩设置的⼀半)。
7、增加服务器CPU个数;但是必须明⽩并⾏处理串⾏处理更需要资源例如内存。
sqlserver数据库 提高效率方法

SQL Server 数据库是一种常见的关系型数据库管理系统,它被广泛应用于企业级应用程序和数据管理系统中。
然而,随着数据库规模的增大和日常操作的复杂性增加,数据库的性能和效率往往成为关注的焦点。
提高SQL Server数据库的效率不仅可以显著改善系统的响应速度和稳定性,也可以节约资源和降低成本。
本文将介绍一些提高SQL Server 数据库效率的方法,帮助管理员和开发人员更好地管理和优化数据库系统。
1. 使用合适的索引索引是数据库中用来加快对表中数据的访问速度的结构,它可以通过创建索引来优化查询的性能。
在SQL Server中,通过对经常进行搜索,排序和过滤的数据列创建合适的索引,可以显著提高查询性能。
定期对索引进行维护和优化也是提高数据库效率的关键步骤。
2. 优化查询语句优化SQL查询语句对于提高数据库效率至关重要。
在编写查询语句时,应避免使用全表扫描,尽量减少数据量,避免使用不必要的连接和子查询,合理使用排序和分组等操作,以及避免使用模糊查询和通配符查询等低效操作。
3. 定期备份和恢复定期备份数据库是保障数据库安全的重要手段,同时备份还能够减少数据库维护的风险。
在备份时,管理员应该选择合适的备份策略,并对备份文件进行存储和管理,以确保数据库在出现故障或灾难时能够快速恢复。
4. 使用存储过程和触发器存储过程和触发器是SQL Server中重要的数据库对象,它们可以提高数据库的安全性和可维护性,同时还能减少网络流量和客户端执行开销,提高数据库的效率。
在编写存储过程和触发器时,应遵循一些最佳实践,如避免多次嵌套存储过程和触发器,减少对数据库的锁定和阻塞。
5. 使用物理分区技术SQL Server支持对数据表进行物理分区,这可以帮助管理员更好地管理数据,并根据需求对数据进行调优。
通过物理分区,可以提高查询和数据加载的性能,同时也方便了数据备份和恢复。
总结通过上述方法,可以显著提高SQL Server数据库的性能和效率,使其能够更好地满足企业应用程序和数据管理系统的需求。
当sqlserver数据量很大时,如何优化表格能加快处理速度

表设计和查询的一些参考1.合理使用索引索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率。
现在大多数的数据库产品都采用IBM最先提出的ISAM索引结构。
索引的使用要恰到好处,其使用原则如下:●在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引。
●在频繁进行排序或分组(即进行group by或order by操作)的列上建立索引。
●在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。
比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立索引。
如果建立索引不但不会提高查询效率,反而会严重降低更新速度。
●如果待排序的列有多个,可以在这些列上建立复合索引(compound index)。
● 使用系统工具。
如Informix数据库有一个tbcheck工具,可以在可疑的索引上进行检查。
在一些数据库服务器上,索引可能失效或者因为频繁操作而使得读取效率降低,如果一个使用索引的查询不明不白地慢下来,可以试着用tbcheck工具检查索引的完整性,必要时进行修复。
另外,当数据库表更新大量数据后,删除并重建索引可以提高查询速度。
2.避免或简化排序应当简化或避免对大型表进行重复的排序。
当能够利用索引自动以适当的次序产生输出时,优化器就避免了排序的步骤。
以下是一些影响因素:●索引中不包括一个或几个待排序的列;●group by或order by子句中列的次序与索引的次序不一样;●排序的列来自不同的表。
为了避免不必要的排序,就要正确地增建索引,合理地合并数据库表(尽管有时可能影响表的规范化,但相对于效率的提高是值得的)。
如果排序不可避免,那么应当试图简化它,如缩小排序的列的范围等。
3.消除对大型表行数据的顺序存取在嵌套查询中,对表的顺序存取对查询效率可能产生致命的影响。
比如采用顺序存取策略,一个嵌套3层的查询,如果每层都查询1000行,那么这个查询就要查询10亿行数据。
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;- 对于包含大量重复元素的列,可以直接采用非聚集索引。
SQLServer的安全性与优化

SQLServer的安全性与优化一、SQL Server的安全性1.1 登录安全在SQL Server中,要想访问数据库,必须先在服务器上注册一个登录帐户。
这个登录帐户需要携带正确的用户名和密码才能进入SQL Server。
建议设置复杂的密码,并且定期修改密码。
1.2 数据库权限SQL Server中存在两种不同的权限:数据库级别权限和对象级别权限。
数据库级别权限控制对数据库的完全访问,如CREATE、ALTER和BACKUP DATABASE等操作,而对象级别权限控制对数据库中特定对象(如表或视图)的访问权限。
1.3 细化用户权限在SQL Server中可以通过角色映射、存储过程和函数等方式细化用户权限,使得用户只能访问需要的数据和操作,提高了数据的安全性。
1.4 认证模式SQL Server支持两种认证模式:Windows验证模式和SQL Server验证模式。
使用Windows验证模式意味着SQL Server会检查用户使用的Windows帐户,而使用SQL Server验证模式意味着SQL Server会检查用户提供的用户名和密码。
1.5 数据库加密SQL Server支持多种数据库加密算法,可以在保证数据安全的同时,不影响数据的访问效率。
二、SQL Server的优化2.1 优化查询SQL Server中的查询优化器可以自动评估查询并生成最佳执行计划。
一般来说,数据库中的查询语句应该尽量简化,避免使用复杂的子查询和连接,同时尽量利用索引。
2.2 索引的使用在SQL Server中,主键和外键可以自动创建索引。
除此之外,还可以手动创建索引以优化查询性能。
在创建索引时,需要根据查询需要选择合适的列,同时尽量减少索引的数量,以避免过度索引的问题。
2.3 硬件优化SQL Server要求硬件配置达到一定的标准,包括CPU、内存、磁盘和网络带宽等。
在硬件条件允许的情况下,可以通过从硬件特性、缓存大小和增加内存等方面进行优化。
SqlServer数据库优化之添加主键和自增长

SqlServer数据库优化之添加主键和⾃增长今天需要给有500万条数据的表添加主键和⾃增长列,其中最⼤的难度在于如何UPDATE这500万多条数据,开始吧!1.先给表添加⼀个字段叫ID,并允许空2.查询表,我想到了使⽤其中的时间列排序来创建表的序号来⽣成我们想要的⾃增列ID。
--其中查询出来的字段将作为我UPDATE时的匹配条件SELECT row_number() over(order by InsertTime asc) as num,UserID cUserID,Score cScore,InsertTime cInsertTime,InoutIndex cInoutIndex,ChairID cChairID FROM[RecordDrawScore] ) c序号已经⾃动⽣成了,下⼀步update到我们的表--其中我优化下把查询到的结果放到临时表#Temp3.update这些数据UPDATE[RecordDrawScore]SET ID = c.numFROM #Temp cWHERE UserID=c.cUserID AND InsertTime = c.cInsertTime AND Score = c.cScore AND InoutIndex =c.cInoutIndex AND ChairID=cChairID4.检查我们update的效果如何SELECT id FROM[dbo].[RecordDrawScore]GROUP BY id HAVING COUNT(id)>1我们添加的id没有重复的,就代表成功了!5.将表中的id设置为主键并添加⾃增长6.新增⼀条记录试试如果⼀切操作顺利,那么会有⼀个新的id注意要是在UPDATE表时,要停掉INSERT操作!不然会有新的列没有ID,就⽆法继续设置为⾃增长列!。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SQLserver数据库优化在使用索引字段作为条件时,如果该索引是联合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用。
iv. 如果临时表的数据量较大,需要建立索引,那么应该将创建查询速度慢的原因很多,常见如下几种:1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)2、I/O吞吐量小,形成了瓶颈效应。
3、没有创建计算列导致查询不优化。
4、内存不足5、网络速度慢6、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)7、锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)8、sp_lock,sp_who,活动的用户查看,原因是读写竞争资源。
9、返回了不必要的行和列10、查询语句不好,没有优化可以通过如下方法来优化查询:1、把数据、日志、索引放到不同的I/O设备上,增加读取速度,以前可以将Tempdb 应放在RAID0上,SQL2000不在支持。
数据量(尺寸)越大,提高I/O越重要.2、纵向、横向分割表,减少表的尺寸(sp_spaceuse)3、升级硬件4、根据查询条件,建立索引,优化索引、优化访问方式,限制结果集的数据量。
注意填充因子要适当(最好是使用默认值0)。
索引应该尽量小,使用字节数小的列建索引好(参照索引的创建),不要对有限的几个值的字段建单一索引如性别字段5、提高网速;6、扩大服务器的内存,Windows 2000和SQL server 2000能支持4-8G的内存。
配置虚拟内存:虚拟内存大小应基于计算机上并发运行的服务进行配置。
运行Microsoft SQL Server? 2000 时,可考虑将虚拟内存大小设置为计算机中安装的物理内存的1.5 倍。
如果另外安装了全文检索功能,并打算运行Microsoft 搜索服务以便执行全文索引和查询,可考虑:将虚拟内存大小配置为至少是计算机中安装的物理内存的 3 倍。
将SQL Server max server memory 服务器配置选项配置为物理内存的1.5 倍(虚拟内存大小设置的一半)。
7、增加服务器CPU个数;但是必须明白并行处理串行处理更需要资源例如内存。
使用并行还是串行程是MsSQL自动评估选择的。
单个任务分解成多个任务,就可以在处理器上运行。
例如耽搁查询的排序、连接、扫描和GROUP BY字句同时执行,SQL SERVER根据系统的负载情况决定最优的并行等级,复杂的需要消耗大量的CPU的查询最适合并行处理。
但是更新操作Update,Insert,Delete还不能并行处理。
8、如果是使用like进行查询的话,简单的使用index是不行的,但是全文索引,耗空间。
like 'a%' 使用索引like '%a' 不使用索引用like '%a%' 查询时,查询耗时和字段值总长度成正比,所以不能用CHAR类型,而是V ARCHAR。
对于字段的值很长的建全文索引。
9、DB Server 和APPLication Server 分离;OLTP和OLAP分离10、分布式分区视图可用于实现数据库服务器联合体。
联合体是一组分开管理的服务器,但它们相互协作分担系统的处理负荷。
这种通过分区数据形成数据库服务器联合体的机制能够扩大一组服务器,以支持大型的多层Web 站点的处理需要。
有关更多信息,参见设计联合数据库服务器。
(参照SQL帮助文件'分区视图')a、在实现分区视图之前,必须先水平分区表b、在创建成员表后,在每个成员服务器上定义一个分布式分区视图,并且每个视图具有相同的名称。
这样,引用分布式分区视图名的查询可以在任何一个成员服务器上运行。
系统操作如同每个成员服务器上都有一个原始表的复本一样,但其实每个服务器上只有一个成员表和一个分布式分区视图。
数据的位置对应用程序是透明的。
11、重建索引DBCC REINDEX ,DBCC INDEXDEFRAG,收缩数据和日志DBCC SHRINKDB,DBCC SHRINKFILE. 设置自动收缩日志.对于大的数据库不要设置数据库自动增长,它会降低服务器的性能。
在T-sql的写法上有很大的讲究,下面列出常见的要点:首先,DBMS处理查询计划的过程是这样的:1、查询语句的词法、语法检查2、将语句提交给DBMS的查询优化器3、优化器做代数优化和存取路径的优化4、由预编译模块生成查询规划5、然后在合适的时间提交给系统处理执行6、最后将执行结果返回给用户其次,看一下SQL SERVER的数据存放的结构:一个页面的大小为8K(8060)字节,8个页面为一个盘区,按照B树存放。
12、Commit和rollback的区别Rollback:回滚所有的事物。
Commit:提交当前的事物. 没有必要在动态SQL里写事物,如果要写请写在外面如:begin tran exec(@s) commit trans 或者将动态SQL 写成函数或者存储过程。
13、在查询Select语句中用Where字句限制返回的行数,避免表扫描,如果返回不必要的数据,浪费了服务器的I/O资源,加重了网络的负担降低性能。
如果表很大,在表扫描的期间将表锁住,禁止其他的联接访问表,后果严重。
14、SQL的注释申明对执行没有任何影响15、尽可能不使用光标,它占用大量的资源。
如果需要row-by-row地执行,尽量采用非光标技术,如:在客户端循环,用临时表,Table变量,用子查询,用Case语句等等。
游标可以按照它所支持的提取选项进行分类:只进必须按照从第一行到最后一行的顺序提取行。
FETCH NEXT 是唯一允许的提取操作,也是默认方式。
可滚动性可以在游标中任何地方随机提取任意行。
游标的技术在SQL2000下变得功能很强大,他的目的是支持循环。
有四个并发选项READ_ONL Y:不允许通过游标定位更新(Update),且在组成结果集的行中没有锁。
OPTIMISTIC WITH valueS:乐观并发控制是事务控制理论的一个标准部分。
乐观并发控制用于这样的情形,即在打开游标及更新行的间隔中,只有很小的机会让第二个用户更新某一行。
当某个游标以此选项打开时,没有锁控制其中的行,这将有助于最大化其处理能力。
如果用户试图修改某一行,则此行的当前值会与最后一次提取此行时获取的值进行比较。
如果任何值发生改变,则服务器就会知道其他人已更新了此行,并会返回一个错误。
如果值是一样的,服务器就执行修改。
选择这个并发选项OPTIMISTIC WITH ROW VERSIONING:此乐观并发控制选项基于行版本控制。
使用行版本控制,其中的表必须具有某种版本标识符,服务器可用它来确定该行在读入游标后是否有所更改。
在SQL Server 中,这个性能由timestamp 数据类型提供,它是一个二进制数字,表示数据库中更改的相对顺序。
每个数据库都有一个全局当前时间戳值:@@DBTS。
每次以任何方式更改带有timestamp 列的行时,SQL Server 先在时间戳列中存储当前的@@DBTS 值,然后增加@@DBTS 的值。
如果某个表具有timestamp 列,则时间戳会被记到行级。
服务器就可以比较某行的当前时间戳值和上次提取时所存储的时间戳值,从而确定该行是否已更新。
服务器不必比较所有列的值,只需比较timestamp 列即可。
如果应用程序对没有timestamp 列的表要求基于行版本控制的乐观并发,则游标默认为基于数值的乐观并发控制。
SCROLL LOCKS 这个选项实现悲观并发控制。
在悲观并发控制中,在把数据库的行读入游标结果集时,应用程序将试图锁定数据库行。
在使用服务器游标时,将行读入游标时会在其上放置一个更新锁。
如果在事务内打开游标,则该事务更新锁将一直保持到事务被提交或回滚;当提取下一行时,将除去游标锁。
如果在事务外打开游标,则提取下一行时,锁就被丢弃。
因此,每当用户需要完全的悲观并发控制时,游标都应在事务内打开。
更新锁将阻止任何其它任务获取更新锁或排它锁,从而阻止其它任务更新该行。
然而,更新锁并不阻止共享锁,所以它不会阻止其它任务读取行,除非第二个任务也在要求带更新锁的读取。
滚动锁根据在游标定义的Select 语句中指定的锁提示,这些游标并发选项可以生成滚动锁。
滚动锁在提取时在每行上获取,并保持到下次提取或者游标关闭,以先发生者为准。
下次提取时,服务器为新提取中的行获取滚动锁,并释放上次提取中行的滚动锁。
滚动锁独立于事务锁,并可以保持到一个提交或回滚操作之后。
如果提交时关闭游标的选项为关,则COMMIT 语句并不关闭任何打开的游标,而且滚动锁被保留到提交之后,以维护对所提取数据的隔离。
所获取滚动锁的类型取决于游标并发选项和游标Select 语句中的锁提示。
锁提示只读乐观数值乐观行版本控制锁定无提示未锁定未锁定未锁定更新NOLOCK 未锁定未锁定未锁定未锁定HOLDLOCK 共享共享共享更新UPDLOCK 错误更新更新更新TABLOCKX 错误未锁定未锁定更新其它未锁定未锁定未锁定更新*指定NOLOCK 提示将使指定了该提示的表在游标内是只读的。
16、用Profiler来跟踪查询,得到查询所需的时间,找出SQL的问题所在;用索引优化器优化索引17、注意UNion和UNion all 的区别。
UNION all好18、注意使用DISTINCT,在没有必要时不要用,它同UNION一样会使查询变慢。
重复的记录在查询里是没有问题的19、查询时不要返回不需要的行、列20、用sp_configure 'query governor cost limit'或者SET QUERY_GOVERNOR_COST_LIMIT来限制查询消耗的资源。
当评估查询消耗的资源超出限制时,服务器自动取消查询,在查询之前就扼杀掉。
SET LOCKTIME设置锁的时间21、用select top 100 / 10 Percent 来限制用户返回的行数或者SET ROWCOUNT来限制操作的行22、在SQL2000以前,一般不要用如下的字句: "IS NULL", "<>", "!=", "!>", "!<", "NOT", "NOT EXISTS", "NOT IN", "NOT LIKE", and "LIKE '%500'",因为他们不走索引全是表扫描。
也不要在Where字句中的列名加函数,如Convert,substring等,如果必须用函数的时候,创建计算列再创建索引来替代.还可以变通写法:Where SUBSTRING(firstname,1,1) = 'm'改为Where firstname like 'm%'(索引扫描),一定要将函数和列名分开。