oracle数据库优化问题?
有表TABLE1(ID INT,NAME VARCHAR2(20),FLAG NUMBER)
数据例子:
ID NAME FLAG
1 A1 0
1 A2 0
1 A3 0
1 B1 1
2 G1 0
2 G2 0
2 G3 0
2 O1 1
3 C1 0
3 C2 0
3 C3 0
3 D1 1
CREATE INDEX IX1_TABLE1 ON TABLE1(ID,NAME)
请问:先面两个语句谁的效率高
1。SELECT * FROM TABLE1 WHERE ID=1 OR FLAG=0(全表扫描)
2。SELECT * FROM TABLE1 WHERE ID=1 UNION
SELECT * FROM TABLE1 WHERE FLAG=0(上面的一句使用索引)
问题点数:30、回复次数:7Top
1 楼eball(e波)回复于 2002-01-28 11:12:39 得分 5
第二句
Top
2 楼bzszp(SongZip)回复于 2002-01-28 11:16:34 得分 5
同意eball,建立索引效率要高一些.Top
3 楼mycode(不写代码)回复于 2002-01-28 11:41:53 得分 10
很难理解是第二句的效率高。
第一句是全表扫描,效率不高是应该的。
但第二句中的flag也需要全表扫描,并且还需要与id=1进行一次union去重,需要的操作更多,很难让人相信会有更好的效率。
如果是我,我肯定会选择第一句来写代码,而不会采用第二种。Top
4 楼learnlj(共同走过)回复于 2002-01-28 11:48:16 得分 5
你建的是复合索引,单检索id能够使用到索引吗?我怎么觉得不可以阿!
单就这个问题我同意mycode(不写代码) 的观点Top
5 楼rainren20000(可爱一刀)回复于 2002-01-28 12:43:32 得分 5
第一句效率比第二句要高因为你建的索引更本没起作用。Top
6 楼smartdonkey(聪明的毛驴)回复于 2002-01-28 13:41:26 得分 0
我觉得mycode(不写代码):假设权表扫描要读100块数据的话。
至少第一句仅仅读100块,而第二句,要读200块数据。
比较一下吧Top
7 楼smartdonkey(聪明的毛驴)回复于 2002-01-28 17:39:06 得分 0
有人回答吗Top




