- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
sqlserver,执行计划分析
对于SqlServer的优化来说,可能优化查询是很常见的事情。关于数据库的优化,本身也是一个涉及面比较的广的话题,首先,打开【SQLServerManagementStudio】,输入一个查询语句看看SqlServer是如何显示查询计划的吧。select,,,,,from OrdersViewasv where=XX-12-1and (2)ON(3)JOIN (4)WHERE (5)GROUPBY (6)WITH{cube|rollup} (7)HAVING (8)SELECT(9)DISTINCT(11) (10)ORDERBY 标准的SQL的解析顺序为: (1).FROM子句组装来自不同数据源的数据 (2).WHERE子句基于指定的条件对记录进行筛选 (3).GROUPBY子句将数据划分为多个分组 (4).使用聚合函数进行计算 (5).使用HAVING子句筛选分组 (6).计算所有的表达式 (7).使用ORDERBY对结果集进行排序 二执行顺序::对FROM子句中前两个表执行笛卡尔积生成虚拟表vt1 :对vt1表应用ON筛选器只有满足为真的行才被插入vt2 (join):如果指定了OUTERJOIN保留表(preservedtable)中未找到的行将行作为外部行添加到vt2生成t3如果from包含两个以上表则对上一个联结生成的结果表和下一个表重复执行步骤和步骤直接结束 :对vt3应用WHERE筛选器只有使为true的行才被插入vt4 BY:按GROUPBY子句中的列列表对vt4中的行分组生成vt5 |ROLLUP:把超组(supergroups)插入vt6生成vt6 :对vt6应用HAVING筛选器只有使为true的组才插入vt7 :处理select列表产生vt8 :将重复的行从vt8中去除产生vt9 BY:将vt9的行按orderby子句中的列列表排序生成一个游标vc10 :从vc10的开始处选择指定数量或比例的行生成vt11并返回调用者 看到这里,那么用过linqtosql的语法有点相似啊?如果我们我们了解了sqlserver执行顺序,那么我们就接下来进一步养成日常sql好习惯,也就是在实现功能同时有考虑性能的思想,数据库是能进行集合运算的工具,我们应该尽量的利用这个工具,所谓集合运算实际就是批量运算,就是尽量减少在客户端进行大数据量的循环操作,而用SQL语句或者存储过程代替。 三、只返回需要的数据 返回数据到客户端至少需要数据库提取数据、网络传输数据、客户端接收数据以及客户端处理数据等环节,如果返回不需要的数据,就会增加服务器、网络和客户端的无效劳动,其害处是显而易见的,避免这类事件需要注意: A、横向来看, (1)不要写SELECT*的语句,而是选择你需要的字段。 (2)当在SQL语句中连接多个表时,请使用表的别名并把别名前缀于每个Column上.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误。--如有表table1(ID,col1)和table2(ID,col2) Select,, --Select,col1,col2–不要这么写,不利于将来程序扩展 fromtable1Ainnerjointable2Bon=Where… B、纵向来看, (1)合理写WHERE子句,不要写没有WHERE的SQL语句。 (2)SELECTTOPN*--没有WHERE条件的用此替代 四:尽量少做重复的工作 A、控制同一语句的多次执行,特别是一些基础数据的多次执行是很多程序员很少注意的。 B、减少多次的数据转换,也许需要数据转换是设计的问题,但是减少次数是程序员可以做到的。 C、杜绝不必要的子查询和连接表,子查询在执行计划一般解释成外连接,多余的连接表带来额外的开销。 D、合并对同一表同一条件的多次UPDATE,比如 UPDATEEMPLOYEESETFNAME=HAIWER WHEREEMP_ID=VPA30890F UPDATEEMPLOYEESETLNAME=YANG WHEREEMP_ID=VPA30890F 这两个语句应该合并成以下一个语句 UPDATEEMPLOYEESETFNAME=HAIWER,LNAME=YANGWHEREEMP_ID=VPA30890F E、UPDATE操作不要拆成DELETE操作+INSERT操作的形式,虽然功能相同,但是性能差别是很大的。 五、注意临时表和表变量的用法 在复杂系统中,临时表和表变量很难避免,关于临时表
文档评论(0)