数据记录太多怎么?

fly_rain 2002-12-06 10:55:38
select * from table1 where field1 (select field1 from table2 where field2='something');

table1,table2中的数据记录都很多,每个表中的记录都有上万条以上,我在PB中一执行上面的SQL语句就死掉了,请问有什么好的解决办法?

select * from table1 where field1 in(select table2.field1 from table2 where table2.field2 in (select table3.field2 from table3 where table3.field3='something'));

我最终希望能执行三个表的复合查询,但每个表的记录太多,一查询,我打开lockview看就锁了,很长时间都不好,PB一会就挂了。请问有什么好的解决方法。如能再告我原因何在,那就多谢谢了。
...全文
79 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
biti_rainy 2002-12-08
  • 打赏
  • 举报
回复
表连接

或者 exists / not exists
zhengg21 2002-12-07
  • 打赏
  • 举报
回复
对于oracle数据库来说上万条纪录还较多啊!
直接使用一个联合查询就可以了,不用担心效率
select table1.field1 from table1,table2
where table1.field1 = table2.field1
and table2.field2='something'
fly_rain 2002-12-06
  • 打赏
  • 举报
回复
我不会用exists呀。
可以教我怎么用吗?
  • 打赏
  • 举报
回复
不要用IN用exists
he_Fly 2002-12-06
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/1236/1236947.xml?temp=.4474451
大家有空帮忙看看。。。
weijsh 2002-12-06
  • 打赏
  • 举报
回复
还是不要用IN,使用外连接
fly_rain 2002-12-06
  • 打赏
  • 举报
回复
不用IN不行啊。等不了值的。
一个是主表,一个是子表,主表中每一个记录对应子表的几个子记录。而主表有上万个记录啊。是根据主表中的条件取出对应的一些记录,然后在子表中查看主表的明细啊。
怎么办,不会就这样看着我死掉了吧?大家帮帮我啊。
weijsh 2002-12-06
  • 打赏
  • 举报
回复
不要进行in操作改成等值运算,如可以的话建议不要使用Rtrim等之类的涵数
jlandzpa 2002-12-06
  • 打赏
  • 举报
回复
没有办法了.
fly_rain 2002-12-06
  • 打赏
  • 举报
回复
94说我8能创索引啦。
请再教我两招,谢谢
fly_rain 2002-12-06
  • 打赏
  • 举报
回复
非常详细,谢谢!
可这个库是别人的,我只能读数据,不能改库结构,怎么办啊?
weijsh 2002-12-06
  • 打赏
  • 举报
回复
分别对table1,table2的field1创建索引,然后进行等值连接
索引:
如果field1很少被update或唯一性较低建议创建Bitmap Index
如果field1唯一性较高且有频繁的update操作,建议创建B-Tree索引
如果field1是有序递增或递减,建议创建Reverse Key Index
fly_rain(飞雨) 够详细了吧!!


beckhambobo 2002-12-06
  • 打赏
  • 举报
回复
有了索引自然会快
fly_rain 2002-12-06
  • 打赏
  • 举报
回复
那应该怎么改呢?请指教,谢谢。
jiezhi 2002-12-06
  • 打赏
  • 举报
回复
使用in自然是比较慢的。重新写语句。
fly_rain 2002-12-06
  • 打赏
  • 举报
回复
jlandzpa(jlandzpa)
请问如何使用表连接,可以讲详细一点吗?
jlandzpa 2002-12-06
  • 打赏
  • 举报
回复
建议采用表连接.
fly_rain 2002-12-06
  • 打赏
  • 举报
回复
还有其它方法吗?期待ING
yuxuan 2002-12-06
  • 打赏
  • 举报
回复
试试这个:
select a.*
from table1 a,table2 b,table3 c
where a.field1=b.field1 and b.field2=c.field2 and c.field3='something');

17,377

社区成员

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

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