数据库 查询数据库时,有什么办法避免使用 union 么?

googya · 2012年03月01日 · 最后由 camel 回复于 2012年03月02日 · 3419 次阅读

假如表之间关系比较复杂,涉及到的表相对多,用 union 的话,会使得关系梳理比较清楚一些。但,性能比较低,更重要的是,还须使用 find_by_sql 这样的操作。问大家有什么好的建议么?

1、如果不使用 union,那使用什么方式比较好? 我能想到的做法是,分多次查询,然后组合结果。这样会增加查询的次数。。。不理 想。

2、如果非用不可,那除了 find_by_sql 之外,有否其他方法?

同问啊,发现 active record 不支持 union 查询,感觉很不自然。所以我有时候直接写 raw sql。 不知有没有更好的办法???

本来 orm 就是单条数据映射成对象,所以支持才不自然。。。(当然,不自然的事情多次发生就自然了)

分多次查询的好处是充分利用 CPU 多核,并且 cache 的几率更大。

还有。。。为什么非要 union 呢?如果两个表有关系,用 association 不是更好? 如果需要数据实时,可以考虑冗余字段,如果不需要实时,那就离线算了缓存。

具体什么情况要用 union?这个最好简单陈述下你的 schema。single table inheritance 能解决某类问题。 改用 union 就用啊,find_by_sql 该用就用嘛,AR 不支持的数据库指令太多了。

@googya 还有一个方法,直接对两个结果集进行|or运算。只是这样会查询两次,而且不支持 lazy loading。其它还好。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号