CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Oracle >  基础和管理

in和or的区别

楼主ynli2002(阿男)2006-01-24 09:16:44 在 Oracle / 基础和管理 提问

现在程序用的是in  
  in里面的项目900多项  
  执行一次sql文需要20多秒  
   
  第一问   改成or会不会变快?  
  第二问   in好像是不能超过1000项?or是否有限制?  
  第三问   in的时候索引不起作用,or的时候是否起作用? 问题点数:50、回复次数:17Top

1 楼cenlmmx(学海无涯苦作舟)回复于 2006-01-24 10:32:31 得分 2

in最后还是要被转成or语句,如果你的in项目太多,建议你把这900项先放到一个临时表(逻辑意义上的临时表),把两个表做连接.Top

2 楼ljgeneral317(地狱火)回复于 2006-01-24 11:27:57 得分 2

对   in和or效率上没多少差别   不过我觉得900   个应该不会那么慢   你可以用楼主的建议试一下  
  select   *   from   table1   where   item1   in   (   select   name   from   temp_table   );  
  应该说很快的速度   这样的查询Top

3 楼ragweed_wg(冷月青州)回复于 2006-01-24 15:25:40 得分 2

in   能不用就不要去用,关联的话,最好也使用主键、索引为关联字段。  
   
  select   *    
  from   table1,temp_table    
  where   table1.item1   =   temp_table.nameTop

4 楼genphone_ru(哎,什么都要学,真累)回复于 2006-01-24 16:01:03 得分 2

把你的表结构和需要实现的算法贴出来Top

5 楼ynli2002(阿男)回复于 2006-01-25 15:08:56 得分 0

把900多个项目登陆到临时表,就不用费时间吗?  
  感觉把900多个项目做insert操作,再加上表连接检索。加起来比   in(900多个项目)更费时间呢?Top

6 楼ynli2002(阿男)回复于 2006-01-25 19:16:10 得分 0

自己顶Top

7 楼cenlmmx(学海无涯苦作舟)回复于 2006-01-25 23:52:46 得分 2

我是说你不要用in方式查询,而是做表连接最快,绝对是比in(900多个项目)更省时间.  
  先把900个用sqlloader插入一个临时用的表,要得了多久呢.Top

8 楼swimming8243(swimming)回复于 2006-01-26 09:24:05 得分 2

楼上的真的可行吗?  
  插900条记录到临时表要n久,再查询估计时间更久  
  建议楼主把各种方法试试吧,可能楼上的效率是最高的Top

9 楼ynli2002(阿男)回复于 2006-01-26 10:47:05 得分 0

to   cenlmmx(学海无涯苦作舟)  
  首先这900多个项目是存在于内存中,不是文件,sqlloader不能用  
  其次900多个项目就意味着执行   900多次的insert操作   加上   建立临时表的时间   加上   连接查询的时间真的会比   in(900多个项目)花费时间短吗?总觉得不大可能呢  
  如    
  //建立临时表  
  create   Temp   Table   tableTemp;  
  for(int   i=0;   i<900;   i++)   {  
      insert     tableTemp   values   (项目值i)  
  }  
  select   **   from   a,   tableTemp   where   a.key   =   tableTemp.key  
   
  //in方式查询  
  select   **   from   a   where   key   in(项目值1,项目值2.......项目值900)  
   
  上面两个哪一个更快?Top

10 楼ragweed_wg(冷月青州)回复于 2006-01-27 08:42:46 得分 2

select   **   from   a,   tableTemp   where   a.key   =   tableTemp.key  
  方式效率高,Temp   表的数据量越大越明显,(为提高效率,将Temp表中的key设置为主键或索引)。  
   
  不得不用in的情况下,in后面sql中加上order   by,效果“大多数”(不是绝对的)情况下也会提高一些。Top

11 楼ynli2002(阿男)回复于 2006-01-27 11:57:11 得分 0

怎么都不看看问题  
  我当然知道select   **   from   a,   tableTemp   where   a.key   =   tableTemp.key  
  方式效率高了  
   
  那不是得把数据先做insert操作麻  
  insert就不算时间啊  
  清仔细看看问题再回答Top

12 楼kingofworl(良辰美景虚度)回复于 2006-01-31 02:19:04 得分 0

请问诸位 select   **   from    两个*   是什么用法呀,我本以为笔误,但发现好几个人都这么用,好奇Top

13 楼INTEL8086(向左看,向右看)回复于 2006-02-03 15:31:56 得分 0

in   的效率比较低,向提高效率用exists替换Top

14 楼epbon(没有)回复于 2006-02-14 15:19:44 得分 2

To:kingofworl(良辰美景虚度)  
  好像没有两个*用法,大概是代码Copy造成的:)Top

15 楼mingxuan3000(铭轩)回复于 2006-02-14 16:05:26 得分 10

in不能超过1000项Top

16 楼boydgmx(授人以鱼不如授人以渔(baidu&google))回复于 2006-02-14 16:12:22 得分 24

如果你的in里面项不会超过1000的话,就用in吧。  
   
  那个   “select   **   ”显然是有人急着回答问题,copy别人的Top

17 楼ynli2002(阿男)回复于 2006-02-20 10:38:15 得分 0

没有一个好答案  
  散分Top

相关问题

  • -> 和 . 的区别?
  • jmail和cdonts区别
  • count() 和 count(*)区别?
  • TCP和UDP区别
  • equals和==的区别
  • char 和 TCHAR 区别
  • EnterpriseBean和EntityBean区别
  • CMP和BMP区别
  • cin 和 cin.get 区别
  • string和stringbuild区别??

关键词

  • 项目
  • 查询
  • 连接
  • 临时表
  • 表
  • 加上
  • 时间
  • temp
  • table
  • select

得分解答快速导航

  • 帖主:ynli2002
  • cenlmmx
  • ljgeneral317
  • ragweed_wg
  • genphone_ru
  • cenlmmx
  • swimming8243
  • ragweed_wg
  • epbon
  • mingxuan3000
  • boydgmx

相关链接

  • Oracle类图书

广告也精彩

反馈

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