请教多表查询中的索引及效率问题!

datoushu 2011-03-19 06:48:05
表A:
a_id(int), b_id(int), category(int), status(int)
表B:
b_id(int), rate(int)

表A数据量几十万,表B数据量几百,现在要求两表联合查询 A.category = [一个整数] A.status = [一个整数] 然后 ORDER BY B.rate DESC 最后要求提取前N个结果,要求能尽可能快的返回结果,请问这样的多表联合查询的索引该如何建?同时SQL语句要怎么写呢?

谢谢了!
...全文
166 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
datoushu 2011-03-20
  • 打赏
  • 举报
回复
谢谢大家的指点,建两个表也是无奈之举,因为还有很多字段我没写出来,如果只建一个表会出现很多的冗余字段,现在我的方案是维护两个rate,定期更新,这样虽然麻烦一些,但是不影响正常应用。
rucypli 2011-03-19
  • 打赏
  • 举报
回复
本身两个表就没有拆开的必要
ACMAIN_CHM 2011-03-19
  • 打赏
  • 举报
回复
是的,如果查询速度很重要的话,则需要在表中添加必要的冗余字段。
datoushu 2011-03-19
  • 打赏
  • 举报
回复
谢谢楼上的回复,这样查询还是比较慢,30多万的A表数据需要花费1秒多。难道真的要维护2个rate,在A表中再建立一个rate,然后定期更新A表的rate吗,这是我想的办法,虽然麻烦,但速度上会快很多?
ACMAIN_CHM 2011-03-19
  • 打赏
  • 举报
回复
select *
from a inner join b on a.b_id=b.b_id
where a.category=123
and a.status=456
order by b.rate
limit 100

create index xxx on a(category,status)
create index xxx2 on a(b_id)

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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