关于加速查询的问题

krack2002 2007-06-21 09:24:05
关于加速查询的问题

我的数据库里有4个table,表t0 t1 t2 t3,数据都是1对多的关系,对于t0的每条记录,怎样快速统计出t1 t2 t3中对应的记录数。

我在程序中用了select count(*) from t2 where f2 in (select …… from ……) 很慢
尤其是统计t3中对应的记录数时 非常慢

t0中大概有17条记录
t1中大概有2000条记录
t2中大概有9万条记录
t3中大概有15万条记录

有什么办法可以解决?
...全文
231 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
肥胖的柠檬 2007-06-21
  • 打赏
  • 举报
回复
如果你这样in 的话不慢才怪,左联一次,再count
jwt1982 2007-06-21
  • 打赏
  • 举报
回复
放存储过程中,会比程序中有好处,数据库会对存储过程进行预编译的。
krack2002 2007-06-21
  • 打赏
  • 举报
回复
这样的统计放在存储过程中和程序中 性能上会不会有明显差别?
klan 2007-06-21
  • 打赏
  • 举报
回复
当然慢了,你是相当于2000*9w*15w的数据量查找

试试把索引加在f2这样的字段上

另外可以建立临时表,不要一下子把4个表全联起来查询,分开来
昵称被占用了 2007-06-21
  • 打赏
  • 举报
回复
select
t0.id,
t1cnt,
t2cnt,
t3cnt
from t0 left join (
select id,count(*) as t1cnt
from t1 group by id
) as t11
on t0.id=t11.id
left join (
select id,count(*) as t2cnt
from t2 group by id
) as t21
on t0.id=t21.id
left join (
select id,count(*) as t3cnt
from t3 group by id
) as t31
on t0.id=t31.id

paoluo 2007-06-21
  • 打赏
  • 举报
回复
可以改用關聯來寫,如果t0和t1是一對多的關係的話

Select Count(t1.關鍵字段) From t0 Inner Join t1 On 關聯條件
Where 條件
krack2002 2007-06-21
  • 打赏
  • 举报
回复
UP
krack2002 2007-06-21
  • 打赏
  • 举报
回复
更明白一点:
table field1(PK) field2(FK)
t0 id
t1 t1id id
t2 t2id t1id
t3 t3id t2id

krack2002 2007-06-21
  • 打赏
  • 举报
回复
to Haiwer(海阔天空):

t0.id是t1的外键
t1.id是t2的外键
t2.id是t3的外键
lwl0606 2007-06-21
  • 打赏
  • 举报
回复
连接之后再查询不知道会不会快一点
select f0,Count(distinct f1),Count(distinct f2),Count(distinct f3)
from t0 left outer join t1 on t0.f0=t1.f1
left outer join t2 on t0.f0=t2.f2
left outer join t3 on t0.f0=t3.f3
bwguang 2007-06-21
  • 打赏
  • 举报
回复
把4个表先左联成一个表,再查询不行吗?
lllyyymmm 2007-06-21
  • 打赏
  • 举报
回复
用exists也不要用in,in的效率实在是低
Andy-W 2007-06-21
  • 打赏
  • 举报
回复
支持 klan(因帅被判7年) ( )的方案。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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