大表联结的问题

frogshero 2004-12-23 06:10:57
tableA,用户资料
yhdm(用户代码 主键), yhlb (用户类别)
tableB,用户的电表
yhdm,dbh(水表号)

表B的主键是(yhdm,dbh),表A的yhlb建有索引
两个表都有20万以上的记录

这样一个句子
select a.yhlb, count(*) from tableA a, tableB b where a.yhdm=b.yhdm
group by a.yhlb
就是按yhlb来统计表数,要150秒,怎么才能快点?
...全文
161 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
frogshero 2005-01-03
  • 打赏
  • 举报
回复
那数据库是别人的,改不得呀
hippie1024 2005-01-01
  • 打赏
  • 举报
回复
我的意思就是
tableB上加一列yhlb
把"用户类别"每次记在"tableB,用户的电表"上

虽然从设计角度讲有数据冗余,不过可以解决你这种查询的效率问题
怎么权衡就在于你自己了
frogshero 2005-01-01
  • 打赏
  • 举报
回复
to hippie1024(痞子)
你如果tableB上记录yhlb??
记录yhlb是啥意思?俺是菜鸟
yxxx 2004-12-24
  • 打赏
  • 举报
回复
优化不太会,
不过,在这帮楼主顶,
一起学习!
GerryYang 2004-12-24
  • 打赏
  • 举报
回复

a,b表上yhdm都建上索引.
然后a.yhlb上也建上索引.保证飞快
WorldMobile 2004-12-24
  • 打赏
  • 举报
回复
在tableA和tableB上按yhdm建立索引,然后再这么写

select a.yhlb, count(1) from tableA a, tableB b where a.yhdm=b.yhdm
group by a.yhlb

速度应该可以提高到10秒以内,你试试。
frogshero 2004-12-24
  • 打赏
  • 举报
回复
up
liuyi8903 2004-12-24
  • 打赏
  • 举报
回复
索引创建合适的话应该在3秒以下.
liuyi8903 2004-12-24
  • 打赏
  • 举报
回复
再说20万条记录已经是很小的数据了.
liuyi8903 2004-12-24
  • 打赏
  • 举报
回复
是的.
语句本身没有什么优化的余地了.
hippie1024 2004-12-24
  • 打赏
  • 举报
回复
这种简单的交联SQL,本身优化余地很小。

楼主,你如果tableB上记录yhlb,再yhlb 上建立索引,将会有质的飞跃:)
北极星2013 2004-12-23
  • 打赏
  • 举报
回复
select a.yhlb, count(a.yhdm) from tableA a, tableB b where a.yhdm=b.yhdm
group by a.yhlb
lynx 2004-12-23
  • 打赏
  • 举报
回复
select b.yhlb,count(b.*) from tableB b group by b.yhlb
ORARichard 2004-12-23
  • 打赏
  • 举报
回复
放点数据上来
frogshero 2004-12-23
  • 打赏
  • 举报
回复
to ORARichard(没钱的日子......)
你写的不对吧,不是统计tablea的用户数,而是tableb的表数
ORARichard 2004-12-23
  • 打赏
  • 举报
回复
--try:

select a.yhlb,a.no from (select yhlb,count(1) no from tablea group by yhlb) a,tableb b
where a.yhdm=b.yhdm;
wupangzi 2004-12-23
  • 打赏
  • 举报
回复
tableA yhdm
tableB yhdm
分别建立索引看看!

17,088

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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