我有三个表,每个表都包含一些公共信息,还有一些表特有的信息。
例如:uiddate在表之间是通用的,但是一个表可以包含一列type,而另一个表包含currency
我需要查询数据库并获取所有三个表中输入的最后20个条目(date DESC)。
我的选择是:
使用一个包含三个UNION ALL子句的大型查询查询数据库一次,并为列传递假值,即:

FROM    (
    SELECT  uid, date, currency, 0, 0, 0

后来
FROM    (
    SELECT  uid, date, 0, type, 0, 0

这将留给我分配空值字段。
或者我可以查询数据库三次,然后在phpsort中通过这些信息得到最近20篇文章的总和。这会给我留下多余的信息——60篇文章需要浏览(LIMIT 20)*3——并迫使我每次执行某种类型的附加快速排序。
有什么更好的选择/有其他的想法吗?
谢谢。

最佳答案

这两个选项比听起来更相似。
当您使用UNIONs执行单个大型查询时,mysql仍将执行三个单独的查询,就像您在备选计划中建议的那样,然后将它们组合成一个结果。
因此,您可以让mysql为您进行过滤(和LIMIT),也可以自己进行过滤。考虑到这个选择,让mysql做所有的工作听起来更好。
在结果集中有额外的列理论上可能会阻碍性能,但是由于结果集如此之小,以至于只有20行,我不希望它有任何可检测的影响。

08-04 15:06