php开源嘛
首页 | English | MySql数据库 | Php编程 | 建站杂烩 | 系统服务器 | 资源共享 | 专题 | 才桀网 | 支持论坛
  当前位置:主页>MySql数据库>文章内容
SQL Server执行SQL语句时内存占用特点
来源:网络 作者:本站整理 发布时间:2007-07-31  

  测试6:执行Hash Join

  6.1 执行全表选取或者低选择性选取phpma.com

  对于两表联接,如果两张表都没有索引,不写明联接提示的情况下,SQL Server默认使用hash join。而对于两表联接,如果两张表都有聚集索引,则SQL Server默认使用Merge Join。

  执行SQL:

Select * From P_Order A
  Inner hash JOIN P_User B ON A.MobileNo=B.MobileNo

  在使用hash join情况下,无论两张表有无索引,都将读取所有的数据页到内存,SQL Server将使用临时表进行处理。逻辑读数近似等于两张表的数据页总和。

  6.2 执行高选择性选取phpma.com

  和merge join执行高选择性选取情况类似,也无法直接执行:

Select * From P_Order A
  Inner merge JOIN P_User B ON A.MobileNo=B.MobileNo
  Where A.MobileNo=28913

  但可以执行这样的结果很少的低选择性脚本:

Select * From P_Order A
  Inner merge JOIN P_User B ON A.MobileNo=B.MobileNo
  Where A.MobileNo<=28001 (注:最终结果只有2条)

  但此情况下,采用netsted loop联接效率更高。

  测试总结phpma.com

  本次测试的主要意义在于,通过分析具体的内存变化结合执行计划、IO读取等信息,可以更清楚地了解SQL Server执行SQL 语句过程。

  另外,也验证了一些通过分析SQL 语句的IO读取、执行计划曾经得到的经验:phpma.com

  (1) 在执行单表查询时,如果是高选择查询,要建立非聚集索引或者聚集索引(推荐非聚集索引,是独立于数据存放的)。如果是低选择性查询,则需要建立聚集索引。

  (2) 在执行联接查询时,如果最终输出结果很少,则适宜使用nested loop join;如果输出结果较多,则通过建立聚集索引,而以merge join方式查询能得到好的性能。对于性能较低的hash join,最好通过转换成merge join或者nested loop join方式提高查询性能。phpma.com


(阅读次数:
共3页: 上一页 [1] [2] 3 下一页
上一篇:SQL Server中盲目地追求一句处理   下一篇:PHP实例:从数组里筛选出重复的数据
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论
  热点文章
·用于SELECT和WHERE子句的SQL函数
·MySQL索引分析和优化
·MySQL数据库下.frm .MYD .MYI损
·怎么删除MySQL数据库中的重复数
·MySQL数据导入与导出
·MySQL数据库中SQL查询语句精华
·如何优化MySQL数据库性能
·MySQL查询优化之查询优化器
·怎么备份MySQL数据库
·如何导入导出*.sql文件到MySQL数
·MySQL数据导入导出方法与工具介
·MySQL索引分析和优化加速网站访
  相关文章
·SQL Server中盲目地追求一句处理
·建站心得:提高MySQL性能的方法
·用MYSQL记录记录网站未知错误的
·怎样轻松解决MYSQL数据库连接过
·Windows上安装多个Mysql的步骤演
·复制: MySQL 5.1 体验--MySQL
·Mysql语句生成后门木马的具体方
·MySQL学习笔记 实用的操作
·Sql Server 数据库超时问题的解
·MySQL与各大数据库的对比
·Microsoft Sql Server中的like语
·解析IP地址连接SQL数据库速度慢

关于我们 | 本站声明 | 友情连接 | 诚邀加盟 | 网站地图
版权Power by DedeCms   技术支持QQ =>> 罗江游鱼   Jacking  后台登陆
Copyright @ 2007 公司地址:柳州市东环路268号 邮编:545006 电话:15920389818 桂ICP备07006725号