繁体   English   中英

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

[英]MySQL performance – Multiple queries or one inefficient query?

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

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

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

    后来

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

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

  2. 或者我可以三次查询数据库,并在PHP中以sort方式对信息进行sort以获得最新的20个帖子。 这将给我留下过多的信息 - 要查看的60个帖子( LIMIT 20 )* 3 - 并强迫我每次都要执行某种类型的addtional quicksort。

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

谢谢。

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

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

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

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

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

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

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

如果您知道自己的限制,则可以限制每个查询,并且联合仅运行在少量数据上。 这应该更好,因为mysql将只返回20行,并将使排序更快,然后你可以在PHP ...

select * from (
  SELECT  uid, date, currency, 0, 0, 0 from table_a order by date desc limit 20
  union
  SELECT  uid, date, 0, type, 0, 0  from table_b order by date desc limit 20
...
) order by date desc limit 20

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM