仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 691|回复: 7
打印 上一主题 下一主题

[学习教程] 浅谈SQL语句优化的几种办法(二)

[复制链接]
再见西城 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:18:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
在执行崩溃恢复时,理解在一个数据库中的每一个表tbl_name对应的在数据库目录中的3个文件是很重要的:1,慎用distinct关头字
在上一节中我们有讲到可使用distinct关头字来优化sql查询,但同时我们又讲到要慎用distinct关头字。假如我们查询的字段只要一个大概很大批的字段,那末就能够利用它。但假如我们的select中有大批的字段,那末该关头字会年夜年夜下降查询的效力,这是由于利用distinct关头字后,sql引擎会在了局会合对一切的了局依据distinct后的列排序过滤等大批的事情,假如查询了局中的列多了,那末排序的庞大性就会呈多少倍数的增添,查询效力天然就会分明的下降了。

我们来看上面的select语句,并检察实行所需的工夫。
selectid,gid,name,did,model,unitfromtable1

在小编的盘算机中实行工夫为36秒。

我们再在select中利用distinct关头字,sql语句以下:
selectdistinctid,gid,name,did,model,unitfromtable1

明显,这条sql会比上条sql查询出的了局要少,但在小编的盘算机中却实行了2分钟。可见,distinct会多影响查询效力了。

2,慎用union关头字
union的功效是将多个了局汇合成一个了局集,它请求兼并的多个了局集的列数与列的数据范例不异。同时它会在兼并后过滤失落不异行的数据。正由于它会过滤失落不异行的数据,地点它在兼并后会有一系列庞大的排序过滤等举措,所distinct关头字一行,多个字段的排序与对照是很耗时的。我们保举利用unionall来取代union,固然union不外滤不异的行,但实在在年夜部分情形下,我们都是不必要过滤不异行的。

3,不要在in关头字中利用子查询
假如in关头字中是常量,如wherenamein(a,b,c)这类没有干系。但只管制止用wherename
in(selectnamefromtable1)如许的查询前提。由于在in关头字中利用子查询后是没法利用索引的。

4,不要在like顶用左包括%与全包括%
如wherelike%xxx与wherelike%xxx%。缘故原由也是由于在like顶用了左包括%与全包括%后没法利用索引,但右包括%不妨。

5,不要在where前提中利用函数
一样缘故原由,在where前提中利用函数会招致索引不成用。

上面给出一切会招致索引不成用的情形:
(1)对索引列利用了函数或盘算
(2)对索引列利用了Like%X或Like%X%
(3)在组合索引的第1列不是利用最多的列
(4)在Where子句中利用了In(子查询)
(5)数据范例转换将招致不克不及使用索引
(6)负向对照将招致不克不及使用索引如果某个数据列里包含许多重复的值,就算为它建立了索引也不会有很好的效果。比如说,如果某个数据列里包含的净是些诸如“0/1”或“Y/N”等值,就没有必要为它创建一个索引。
愤怒的大鸟 该用户已被删除
沙发
发表于 2015-1-18 12:41:06 | 只看该作者
以前的DTS轻盈简单。但是现在的SSIS虽然功能强大了很多,但是总是让人感觉太麻烦。看看论坛中询问SSIS的贴子就知道。做的功能太强大了,往往会有很多用户不会用了
谁可相欹 该用户已被删除
板凳
发表于 2015-1-24 12:08:23 | 只看该作者
但换公司用MSSQL2K感觉自己好像根本就不了解MSSQL。什么DTS触发器以前根本没用过。
海妖 该用户已被删除
地板
发表于 2015-2-1 10:57:01 | 只看该作者
sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西
乐观 该用户已被删除
5#
发表于 2015-2-20 18:02:08 | 只看该作者
一个是把SQL语句写到客户端,可以使用DataSet进行加工;
分手快乐 该用户已被删除
6#
发表于 2015-3-6 18:53:27 | 只看该作者
比如日志传送、比如集群。。。
老尸 该用户已被删除
7#
发表于 2015-3-13 07:08:35 | 只看该作者
再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。
变相怪杰 该用户已被删除
8#
发表于 2015-3-20 16:27:50 | 只看该作者
现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 05:28

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表