请教一个笔试题!关于多表查询!

bbs66163 2008-10-08 10:20:15
有四个表,每个表中都有几十万条数据,各个表都有关系
现在要做一个查询,四个表都要涉及到,我是这样做的
select * from A,B,C,D where A.id=B.Fid and B.id=C.Fid and D.id=A.Fid where.......
但这感觉这是一个笨方法,查询效率应该不高,请教大家,有没有什么好办法!
比如使用连接查询
...全文
228 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
范佩西_11 2008-10-08
  • 打赏
  • 举报
回复
具体问题具体分析。涉及到优化这块的
比如你的表再排序的时候要把数据量大的放前,数据量小的放后面比如
a表10,b表100000,那就select XX from b,a
yf520gn 2008-10-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 bbs66163 的回复:]
结果集只有三个:
分别是"物料名称","采购员","总金额"
[/Quote]
那就给这3个字段添加索引~~
yf520gn 2008-10-08
  • 打赏
  • 举报
回复
要提高效率可以给常用字段添加索引
bbs66163 2008-10-08
  • 打赏
  • 举报
回复
结果集只有三个:
分别是"物料名称","采购员","总金额"
yf520gn 2008-10-08
  • 打赏
  • 举报
回复
select a.*,b.* ,c.* ,d.* from A inner join B onA.id=B.Fid inner join c on B.id=C.Fid inner join D on D.id=A.Fid
rexyudl 2008-10-08
  • 打赏
  • 举报
回复
使用什么样的查询方法,主要根据业务需求来判断。当然满足业务需求的前提下也要考虑到运行的效率!
oracledbalgtu 2008-10-08
  • 打赏
  • 举报
回复
效率高低,关键要看你查询结果集的多少,如果最后结果是10条,肯定有方法让他很快,如果你返回10万的记录,那就没有什么好方法了。呵呵

[Quote=引用楼主 bbs66163 的帖子:]
有四个表,每个表中都有几十万条数据,各个表都有关系
现在要做一个查询,四个表都要涉及到,我是这样做的
select * from A,B,C,D where A.id=B.Fid and B.id=C.Fid and D.id=A.Fid where.......
但这感觉这是一个笨方法,查询效率应该不高,请教大家,有没有什么好办法!
比如使用连接查询
[/Quote]
hyrongg 2008-10-08
  • 打赏
  • 举报
回复
select * from A,B,C,D where A.id=B.Fid and B.id=C.Fid and D.id=A.Fid

这个就是连接了。

这种要看实际表数据量情况,也可以用join来做。
rain_zheng 2008-10-08
  • 打赏
  • 举报
回复
怎么都没有具体的数据测试
认真读书 2008-10-08
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 bbs66163 的回复:]
引用 12 楼 chenping1984 的回复:
比如 "物料名称" 在A表,"采购员" 在B表,"总金额" 在B表

select a."物料名称",b."总金额",c."采购员" from A a inner join B b on a.id=b.Fid inner join C c on b.id=c.Fid inner join D d on d.id=a.Fid

用内连接效率会更快吗?
[/Quote]

更慢
dlpseeyou 2008-10-08
  • 打赏
  • 举报
回复
要提高效率可以给常用字段添加索引,数据大索引很重要
bbs66163 2008-10-08
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 chenping1984 的回复:]
比如 "物料名称" 在A表,"采购员" 在B表,"总金额" 在B表

select a."物料名称",b."总金额",c."采购员" from A a inner join B b on a.id=b.Fid inner join C c on b.id=c.Fid inner join D d on d.id=a.Fid
[/Quote]
用内连接效率会更快吗?
chenping1984 2008-10-08
  • 打赏
  • 举报
回复
比如 "物料名称" 在A表,"采购员" 在B表,"总金额" 在B表

select a."物料名称",b."总金额",b."采购员" from A a inner join B b on a.id=b.Fid inner join C c on b.id=c.Fid inner join D d on d.id=a.Fid

chenping1984 2008-10-08
  • 打赏
  • 举报
回复
比如 "物料名称" 在A表,"采购员" 在B表,"总金额" 在B表

select a."物料名称",b."总金额",c."采购员" from A a inner join B b on a.id=b.Fid inner join C c on b.id=c.Fid inner join D d on d.id=a.Fid

leiru 2008-10-08
  • 打赏
  • 举报
回复
mark
lixinbill 2008-10-08
  • 打赏
  • 举报
回复
加了索引还要说一点,SQL语句 不要用select *..... 尤其是数据量太大的时候 你需要什么字段就select 什么字段,如果你需要表里的所有字段,就把所有字段都写一边 比如 select id ,value,num ..... 这样数据量大的时候效率会提高不少
yf520gn 2008-10-08
  • 打赏
  • 举报
回复
就给常用的几个查询条件字段加上索引就好
例如:给A表的a字段创建索引
create index INX_A on A (a)

17,377

社区成员

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

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