表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语句要怎么写呢?谢谢了!

解决方案 »

  1.   

    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 100create index xxx on a(category,status)
    create index xxx2 on a(b_id)
      

  2.   

    谢谢楼上的回复,这样查询还是比较慢,30多万的A表数据需要花费1秒多。难道真的要维护2个rate,在A表中再建立一个rate,然后定期更新A表的rate吗,这是我想的办法,虽然麻烦,但速度上会快很多?
      

  3.   

    谢谢大家的指点,建两个表也是无奈之举,因为还有很多字段我没写出来,如果只建一个表会出现很多的冗余字段,现在我的方案是维护两个rate,定期更新,这样虽然麻烦一些,但是不影响正常应用。