ITPUB论坛 » Oracle开发 » SQL优化
新一届的微软MVP评选已经开始,欢迎各位推荐!
2008-7-3 12:58 sxlcom
SQL优化

请问以下语句如何优化:


CREATE TABLE aa_001
   (         ip VARCHAR2(28),
        name VARCHAR2(10),
        password VARCHAR2(30)           )

select * from aa_001 where ip in (1,2,3) order by name desc;
--目前表中记录有一千多万条左右

2008-7-3 13:01 dingjun123
你的那个语句1千多万,条件很少,语句简单,
速度应该还可以的,针对你的语句要优化,我只知道两点,一般情况下,特殊情况除外,主要还是自己测试一下:
1.不要用*,应该用具体的名字,可读性强,也明确点,也许能提高性能
2.最好不要用in,用exists
3.应该在相关字段上建个index

[[i] 本帖最后由 dingjun123 于 2008-7-3 13:45 编辑 [/i]]

2008-7-3 13:06 sxlcom
用in 不就不能使用索引了吗

2008-7-3 13:06 wuhuaT
同意LS的

2008-7-3 13:06 sxlcom
而且in中的值个数是不确定的

2008-7-3 13:16 sxlcom
本人也没有实际数据,只是本人对这种写法的性能产生怀念,只是在这种写法上有没有可以改进的方法,关键在于如把in改成其它的写法来提高性能

2008-7-3 13:19 sxlcom
本人也没有实际数据,只是本人对这种写法的性能产生怀念,只是在这种写法上有没有可以改进的方法,关键在于如把in改成其它的写法来提高性能

2008-7-3 13:42 gthboy
这个不用in而用exists该怎么写?谁来示范一下,谢谢

2008-7-3 13:44 junsansi
如果in中只有3条的话,将ip in改exists是不靠谱的~~~

2008-7-3 13:54 sxlcom
关键是in中的值个数不定,难道没有优化的于地了?

2008-7-3 13:59 junsansi
[quote]原帖由 [i]sxlcom[/i] 于 2008-7-3 13:54 发表 [url=http://www.itpub.net/redirect.php?goto=findpost&pid=10841622&ptid=1015964][img]http://www.itpub.net/images/common/back.gif[/img][/url]
关键是in中的值个数不定,难道没有优化的于地了? [/quote]
不定有什么关系?这么简单的语句,从写法上优化的可能性非常低了~~

2008-7-3 14:27 zhangfengh
单纯想从语法上找优化,应该没有多少空间。

结合具体的需求,再想如何优化吧

2008-7-3 15:04 javens
怎麼优化

2008-7-3 15:18 jvkojvko
这样已经很简洁了,没什么优化空间

2008-7-3 15:46 棉花糖ONE
晕了,谁说的in不能使用索引啊,你这个语句如果ip的选择性强的话,可以在ip上创建索引,走inlist

2008-7-3 16:52 codearts
在ip, name上加个组合索引

2008-7-3 17:22 onlyzz
IP上加了索引,走的多半也是index_range_scan,性能也不怎么滴

2008-7-3 17:24 棉花糖ONE
[quote]原帖由 [i]onlyzz[/i] 于 2008-7-3 17:22 发表 [url=http://www.itpub.net/redirect.php?goto=findpost&pid=10844744&ptid=1015964][img]http://www.itpub.net/images/common/back.gif[/img][/url]
IP上加了索引,走的多半也是index_range_scan,性能也不怎么滴 [/quote]

:sweat2: 性能好不好看这个字段的选择性,如果ip in (1,2,3)符合这个3个的就2,3条,你说效率会不高吗

还有为什么说index range scan的效率不咋的:o

2008-7-3 23:35 jiuzhouh
回复 #1 sxlcom 的帖子

俺是新手啊,我是这样将IN 该为EXISTS的,错了请大家不要见笑,多多指教啊...

select * from aa_001
where exists(select ip from aa_001
                      where ip = 1
                             or ip = 2
                             or ip = 3
                      )
order by name desc

2008-7-4 06:53 eyunbo
看看执行计划就可知道是否使用了索引。

[[i] 本帖最后由 eyunbo 于 2008-7-4 06:55 编辑 [/i]]

页: [1] 2
查看完整版本: SQL优化


Powered by ITPUB论坛