MySQL性能 - 多个查询或一个低效查询?

3 php mysql performance union

我有三个表,每个表包含一些常用信息,以及表中唯一的一些信息.例如:uid,date是各表之间的通用性,但一个表可以包含柱type,而另一个包含currency.我需要查询数据库并获取date DESC已在所有三个表中输入的最后20个条目().我的选择是:

  1. 查询数据库一次,使用一个包含三个UNION ALL子句的大型查询,并传递列的假值,IE:

    FROM    (
        SELECT  uid, date, currency, 0, 0, 0
    
    Run Code Online (Sandbox Code Playgroud)

    后来

    FROM    (
        SELECT  uid, date, 0, type, 0, 0
    
    Run Code Online (Sandbox Code Playgroud)

    这将留下我分配的空值字段..

  2. 或者我可以三次查询数据库,并以某种方式在PHP中sort通过信息获取最新的20个帖子.这将给我留下过多的信息 - 60个帖子来浏览(LIMIT 20)*3 - 并强迫我每次都要预先形成某种类型的addtional quicksort.

什么选择更好/任何替代想法?

谢谢.

Vot*_*ple 5

这两个选项比听起来更相似.

当您使用UNIONs 执行单个大型查询时,MySQL仍将执行三个单独的查询,就像您在备用计划中提出的那样,然后将它们组合到单个结果中.

所以,你可以让MySQL LIMIT为你做过滤(和),或者你可以自己做.鉴于这种选择,让MySQL做所有的工作听起来更可取.

在结果集中有额外的列理论上可能会影响性能,但是如果结果集的结果设置为20行,我不会指望它会产生任何可检测的影响.


Nic*_*las 0

这完全取决于您的桌子有多大。如果每个表有几千条记录,您可以使用第一个解决方案(UNION),就可以了。

在更大的表上,我可能会选择第二种解决方案,主要是因为它比 UNION 方式使用更少的资源(RAM),并且仍然相当快。

但我建议您考虑一下您的数据模型,并可能对其进行优化。事实上,您必须使用基于 UNION 的查询通常意味着有优化的空间,通常通过合并三个表,并添加一个“类型”字段(名称根本不好,但您明白我的观点)。