[英]Better site performance: multiple simple mySQL queries or one complex mySQL query later manipulated in PHP?
[英]MySQL performance – Multiple queries or one inefficient query?
我有三个表,每个表包含一些常用信息,以及表中唯一的一些信息。 例如: uid
, date
在表中是通用的,但是一个表可以包含列type
,而另一个表包含currency
。 我需要查询数据库并获取已在所有三个表中输入的最后20个条目( date DESC
)。 我的选择是:
查询数据库一次,使用一个包含三个UNION ALL
子句的大型查询,并传递列的假值,IE:
FROM ( SELECT uid, date, currency, 0, 0, 0
后来
FROM ( SELECT uid, date, 0, type, 0, 0
这将留下我分配的空值字段..
或者我可以三次查询数据库,并在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.