SQL Server数据库性能优化之SQL语句篇

上传人:ba****u6 文档编号:184016135 上传时间:2023-02-01 格式:DOCX 页数:7 大小:16.71KB
收藏 版权申诉 举报 下载
SQL Server数据库性能优化之SQL语句篇_第1页
第1页 / 共7页
SQL Server数据库性能优化之SQL语句篇_第2页
第2页 / 共7页
SQL Server数据库性能优化之SQL语句篇_第3页
第3页 / 共7页
资源描述:

《SQL Server数据库性能优化之SQL语句篇》由会员分享,可在线阅读,更多相关《SQL Server数据库性能优化之SQL语句篇(7页珍藏版)》请在装配图网上搜索。

1、SQL Server数据库性能优化之SQL语句篇(转自重名鸟bolg Java)近期项目需要,做了一段时间的SQLServer性能优化,遇到了一些问题,也积累了一些经验, 现总结一下,与君共享。SQLServer性能优化涉及到许多方面,如良好的系统和数据库设计, 优质的SQL编写,合适的数据表索引设计,甚至各种硬件因素:网络性能、服务器的性能、操 作系统的性能,甚至网卡、交换机等。这篇文章主要讲到如何改善SQL语句,还将有另一篇讨 论如何改善索引。如何改善SQL语句的一些原则:1. 按需索取字段,跟SELECT* ”说拜拜字段的提取一定要按照用多少提多少”的原则,避免使用SELECT* ”这样

2、的操作。做了这 样一个实验,表tblA有1000万数据:select top 10000 cl, c2, c3, c4 from tblA order by cl desc -用时:4673 毫秒select top 10000 c1, c2, c3 from tblA order by c1 desc -用时:1376 毫秒select top 10000 c1, c2 from tblA order by c1 desc -用时:80 毫秒由此看来,我们每少提取一个字段,数据的提取速度就会有相应的提升。但提升的速度还要 看您舍弃的字段的大小来判断。另外,关于“SELECT *的问题,可以参

3、考这篇文章::80/goodspeed/archive/2007/07/20/index_coverage.html2. 字段名和表名要写规范,注意大小海这一点要多注意,如果大小写写错的话,虽然SQL仍然能正常执行,但数据库系统会花一定的 开销和时间先要把您写的规范成正确的,然后再执行SQL。写对的话,这个时间就省了。正常的:selecttop10dteTransaction,txtSystem_idfromtblTransactionSystem不小心的:selecttop10dtetransaction,txtsystem_idfromtbltransactionsystem3. 适当使用

4、过渡表把表的一个子集进行排序并创建临时表,有时能加速查询。它有助于避免多重排序操作,而且在其他方面还能简化优化器的工作。例如:SELECTcust.name ,rcvbles.balance,othercolumnsFROMcust ,rcvblesWHEREcust.customer_id = rcvlbes.customer_idANDrcvblls.balance 0ANDcust.postcode 98000ORDER BYcust.name如果这个查询要被执行多次而不止一次,可以把所有未付款的客户找出来放在一个临时文件中,并按客户的名字进行排序:SELECTcust.name , r

5、cvbles.balance ,othercolumnsINTOtemp_cust_with_balanceFROMcust , rcvblesWHEREcust.customer_id = rcvlbes.customer_idANDrcvblls.balance 0ORDER BYcust.name然后以下面的方式在临时表中查询:SELECT cl,c2 FROM temp_cust_with_balance WHERE postcode “98000”临时表中的行要比主表中的行少,而且物理顺序就是所要求的顺序,减少了磁盘I/O ,所以查询 工作量可以得到大幅减少。注意:过渡临时表创建后不

6、会反映主表的修改。在主表中数据频繁修 改的情况下,注意不要丢失数据。4.别在where条件中做函数计算这样做的后果是将在每个行上进行运算,这将导致该列的索引失效而触发全表扫描。如下SQL:select * from users where YEAR(dteCreated) 2007可以改成select * from users where dteCreated 0或a 等。另外还设 置字段不允许为空,而用一个缺省值代替空值,如一个datetime字段,可以将默认时间设为 “1900-01-01 ”。7. 及 2与A=3的效果就有很大 的区别了,因为A2时sq】会先找出为2的记录索引再进行比较,

7、而A=3时sql则直接找到 =3的记录索引。可结合非聚集索引一起考虑。8. LIKE操作符LIKE操作符可以应用通配符查询,里面的通配符组合可能达到几乎是任意的查询,但是如果用 得不好则会产生性能上的问题,如LIKE T00% 这种查询不会引用索引,而LIKE X5400% 则会引用范围索引。因为索引的摆放是依据字段值升序或降序排列,like%*这种用法,不能利 用有序的数据结构,利用二分法查找数据。一个实际例子:用YW_YHJBQK表中营业编号后面的户标识号可来查询营业编号YY_BH LIKE T00% 这个条件会产生全表扫描,如果改成 YY_BH LIKE X5400% OR YY_BH

8、LIKE B5400% 则会利用 YY_BH 的索引进行两个范 围的查询,性能肯定大大提高。9. 查询条件中的适当与不适当 查询参数可以包含一下操作:=、=、=、BETWEEN 、部分like其中,like当这样 使用时会用到索引:like*%,但like%*就用不到索引。不适当的查询参数有:NOT、!=、!、!、NOTEXISTS、NOTIN、NOTLIKE 等,还有一些不当的用法,例如:对数据进行计算,负向查询、等号左边使用函数、使用OR。 上述语法都不用不上索引,降低程序的效率。10.慎用 DELETE一般在存储过程中或多或少都会实现一些删除数据的逻辑。对小数量的表来说,问题倒是不大。

9、但对于大数据量的表来说,采用delete删除数据会对储存过程的性能产生一定的影响。因为 delete采用的是全表逐条扫描的方式进行,是一种事务性操作,会计入SQLServer的事务日志 中。不但增加了运行时间,同时也频繁写入LOG文件,导致LOG文件过大,过分消耗磁盘空 间。所以,可以用truncate操作代替delete,truncate并不会计入事务日志中,同时也是不带 条件的删除,执行速度很快。又或者直接drop掉表重新创建,有时都会比delete来得快。PS:第10点引出的两种清空SQL Server日志文件的方法一种方法:清空日志。1. 打开查询分析器,输入命令DUMP TRANSACTION数据库名 WITH NO_LOG2. 再打开企业管理器-右键你要压缩的数据库-所有任务-收缩数据库-收缩文件-选择日志 文件-在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这 个数,确定就可以了。另一种方法有一定的风险性,因为SQL SERVER的日志文件不是即时写入数据库主文件的, 如处理不当,会造成数据的损失。1:册。除LOG分离数据库 企业管理器一服务器一数据库一右键一分离数据库2:删除LOG文件附加数据库 企业管理器一服务器一数据库一右键一附加数据库此法生成新的LOG,大小只有500多K。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!