CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

再提问sql语句的优化问题

楼主daosh(yuelaiyuecai@Quake3_forever)2003-11-02 15:38:30 在 MS-SQL Server / 基础类 提问

有这么条语句:  
  select   *  
  from   tabA  
  where   DocId   in    
  (   select   DocId   from   tabB   where   (   Word='csdn'   or   Word='msdn')   )  
  这条语句  
  所影响的行数为   5217   行)  
  表   'tabA'。扫描计数   1,逻辑读   4140   次,物理读   0   次,预读   0   次。  
  表   'tabB'。扫描计数   2,逻辑读   86   次,物理读   0   次,预读   0   次。  
   
  请问有什么办法使它执行的尽量快点?  
   
  另外试了select   a.*  
  from   tabA   a,tabB   b  
  where   b.Word   in   ('csdn','msdn')  
  and   a.docid=b.docid  
  (所影响的行数为   9486   行)  
  表   'WebPage_tab'。扫描计数   1,逻辑读   4140   次,物理读   0   次,预读   0   次。  
  表   'InvertedDoc_tab'。扫描计数   2,逻辑读   86   次,物理读   0   次,预读   0   次。  
  选出的行数比上面的多,看扫描次数和读次数是相同的(替换where中的两个条件结果相同)  
  我试了select   a.*  
  from   tabA   a,tabB   b  
  where   b.Word   ='csdn'  
  and   a.docid=b.docid  
  union  
  select   a.*  
  from   tabA   a,tabB   b  
  where   b.Word   ='msdn'  
  and   a.docid=b.docid  
  (所影响的行数为   5217   行)  
  表   'tabA'。扫描计数   1743,逻辑读   9101   次,物理读   0   次,预读   0   次。  
  表   'tabB'。扫描计数   2,逻辑读   86   次,物理读   0   次,预读   0   次。  
  又试了  
  select   *  
  from   tabA  
  where   DocId   in    
  (   select   DocId   from   tabB   where   Word='csdn'   )  
  union  
  select   *  
  from   tabA   a  
  where   DocId   in    
  (   select   DocId   from   tabB   where   Word='msdn')  
  (所影响的行数为   5217   行)  
  表   'WebPage_tab'。扫描计数   775,逻辑读   6470   次,物理读   0   次,预读   0   次。  
  表   'InvertedDoc_tab'。扫描计数   2,逻辑读   86   次,物理读   0   次,预读   0   次。  
   
  再次清问:请问有什么办法使这一语句执行的尽量快点?  
   
   
  问题点数:50、回复次数:10Top

1 楼pengdali()回复于 2003-11-02 15:45:21 得分 10

select   *  
  from   tabA  
  where   exists   (select   1   from   tabB   where   (Word='csdn'   or   Word='msdn')   and   DocId=taba.DocId)Top

2 楼daosh(yuelaiyuecai@Quake3_forever)回复于 2003-11-02 15:56:55 得分 0

大力,感觉差不多啊(就是一次执行的时候物理读和预读的次数好像有点差别,多运行几次就差不多一样了)  
  (所影响的行数为   5217   行)  
   
  表   'WebPage_tab'。扫描计数   1,逻辑读   4140   次,物理读   0   次,预读   0   次。  
  表   'InvertedDoc_tab'。扫描计数   2,逻辑读   86   次,物理读   0   次,预读   0   次。  
  Top

3 楼pengdali()回复于 2003-11-02 16:02:17 得分 5

语句可能只有这样。你对你的表加索引可以提高效率。Top

4 楼daosh(yuelaiyuecai@Quake3_forever)回复于 2003-11-02 16:11:52 得分 0

那我该怎么添加索引呢?  
  我已经在word字段设置了cluster索引,分别在a,b表的docid字段设置了非cluster索引Top

5 楼youngby(C-love)回复于 2003-11-03 00:53:28 得分 5

看谁读得最多呀。。  
  Top

6 楼zjcxc(邹建)回复于 2003-11-03 09:14:10 得分 15

在查询分析器中,写上查询语句:  
  select   *  
  from   tabA  
  where   DocId   in    
  (   select   DocId   from   tabB   where   (   Word='csdn'   or   Word='msdn')   )  
   
  按Ctrl+L,再按F5执行,看是否利用上了索引.Top

7 楼daosh(yuelaiyuecai@Quake3_forever)回复于 2003-11-05 21:41:19 得分 0

to     zjcxc(邹建)   :请问怎么看有没有利用上索引啊?Top

8 楼tangxc2003(糖糖)回复于 2003-11-07 18:15:27 得分 8

select   *  
  from   tabA  
  where   exists   (select   1   from   tabB   where   (Word='csdn'   or   Word='msdn')   and   DocId=taba.DocId)Top

9 楼bruce007(蜀人)回复于 2003-11-07 20:04:11 得分 7

select   tabA.*  
  from   tabA,   tabB  
  where   (tabB.Word='csdn'   or   tabB.Word='msdn')   and   tabA.DocId   =   tabB.DocIdTop

10 楼daosh(yuelaiyuecai@Quake3_forever)回复于 2003-11-08 21:58:03 得分 0

谢谢各位的热情了  
  我还是先满足基本功能吧:>Top

相关问题

  • sql语句提问
  • 优化sql语句
  • sql语句优化
  • SQL 语句优化
  • 新手提问-SQL语句
  • 提问一个sql语句
  • SQL语句优化问题
  • Sql语句优化问题
  • 如何优化SQL语句?
  • sql语句优化求教。

关键词

  • 语句
  • 物理
  • 逻辑
  • word
  • msdn
  • csdn
  • 执行
  • tabb
  • docid
  • taba

得分解答快速导航

  • 帖主:daosh
  • pengdali
  • pengdali
  • youngby
  • zjcxc
  • tangxc2003
  • bruce007

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo