再提问sql语句的优化问题
有这么条语句:
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




