求一个SELECT语句

Dishine 2006-11-09 02:42:26
如果有一个表有三个字段:SOMETABLE(ID, NAME).
现在知道一批ID, 要查出对应的NAME,现在的问题是这一批ID大约有2000个,记录数约为100W,我如果写这个SELECT语句?

是不是只有这一种方法:
select * from sometable where id in ( 暴长的ID组合起来的字符串 )

我记得in这个关键字会触发全表遍历,这样的效率是不是非常低,请大家仁者见仁,智者见智。
...全文
277 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dishine 2006-11-13
  • 打赏
  • 举报
回复
感谢大家的帮助,最终达成的意思就是创建一个临时表,然后再查询。

另外把若干个ID写成条件,用UltraEdit也可以很好的实现 :)
shyming 2006-11-13
  • 打赏
  • 举报
回复
licsth() 說的對,應該是or才對,
聽到ling242a()的建議,我覺得挺好的,結果我說的方法和他講的應該沒有問題:
利用Excle的橫轉列的功能,將結果變成:
|id1|
|id2|
;
|id2000|
以後,建立temp table:xxtable(col)
在pl/sql里:select xxtable for update,粘貼excel的內容,commit;
(建立索引在xxtable上)再直接兩表關聯就很快,效率很高了。
Dishine 2006-11-10
  • 打赏
  • 举报
回复
up~!
Dishine 2006-11-10
  • 打赏
  • 举报
回复
To: licsth()
select * from sometable
where id in ( 暴长的ID组合起来的字符串 )
and to_number(id)>0

“to_number(id)>0”用来做什么的?
白发程序猿 2006-11-10
  • 打赏
  • 举报
回复
建一個臨時表存儲你要查詢的那些ID號,然後用表聯合查詢
小李木耳 2006-11-10
  • 打赏
  • 举报
回复
to:shyming(Forest Robber)
where id=id1 and id=id2....
是错误的,应该是:
where id=id1 or id=id2....
shyming 2006-11-10
  • 打赏
  • 举报
回复
剛好我處理過類似的情況,當時我是這樣處理的:
暴长的ID组合=id1,id2,id3,id4,...id2000..
1.將其Copy到Excel,另存為CSV,以逗號做分隔符,這樣結果是id1|id2|...被列隔開
2.利用Excle的橫轉列的功能,將結果變成:
|id1|
|id2|
;
|id2000|
3. 將excle內容Copy到文本文檔kk.txt中
4. 打開kk.txt:Ctrl+F 將所有的'id'替代為:'and id=id'
(這個步驟可以靈活運用id前綴,或從Excel copy的時候在前面新增一列,此列內容全部為‘XXX’,再做全文替換:"XXX"--> "and id=")
5. 格式會變成:
and id=id1
and id=id2
;
and id=id2000
6.補會此SQL
where id=id1 and id=id2....
如果覺得些SQL太長,可以分三次分開執行

小李木耳 2006-11-10
  • 打赏
  • 举报
回复
to:Dishine(Dishine Chen)
>“to_number(id)>0”用来做什么的?
用来启用index。
小李木耳 2006-11-09
  • 打赏
  • 举报
回复
select * from sometable
where id in ( 暴长的ID组合起来的字符串 )
and to_number(id)>0
Dishine 2006-11-09
  • 打赏
  • 举报
回复
“exists, in, not in都属于不可优化的扫描参数,都会触发全表遍历。”可能有点错 :(

摘:
不满足SARG形式的语句最典型的情况就是包括非操作符的语句,如:NOT、!=、<>、!<、!>、NOT EXISTS、NOT IN、NOT LIKE等,另外还有函数。

另外在sql server下面,exist与in的速度差不多,不知道oracle下如何。
Dishine 2006-11-09
  • 打赏
  • 举报
回复
exists, in, not in都属于不可优化的扫描参数,都会触发全表遍历。
guoxyj 2006-11-09
  • 打赏
  • 举报
回复
用EXISTS 代替in

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧