我有三个表,每个表包含一些常用信息,以及表中唯一的一些信息.例如:uid
,date
是各表之间的通用性,但一个表可以包含柱type
,而另一个包含currency
.我需要查询数据库并获取date DESC
已在所有三个表中输入的最后20个条目().我的选择是:
查询数据库一次,使用一个包含三个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)
这将留下我分配的空值字段..
或者我可以三次查询数据库,并以某种方式在PHP中sort
通过信息获取最新的20个帖子.这将给我留下过多的信息 - 60个帖子来浏览(LIMIT 20
)*3 - 并强迫我每次都要预先形成某种类型的addtional quicksort.
什么选择更好/任何替代想法?
谢谢.
这两个选项比听起来更相似.
当您使用UNION
s 执行单个大型查询时,MySQL仍将执行三个单独的查询,就像您在备用计划中提出的那样,然后将它们组合到单个结果中.
所以,你可以让MySQL LIMIT
为你做过滤(和),或者你可以自己做.鉴于这种选择,让MySQL做所有的工作听起来更可取.
在结果集中有额外的列理论上可能会影响性能,但是如果结果集的结果设置为20行,我不会指望它会产生任何可检测的影响.
这完全取决于您的桌子有多大。如果每个表有几千条记录,您可以使用第一个解决方案(UNION),就可以了。
在更大的表上,我可能会选择第二种解决方案,主要是因为它比 UNION 方式使用更少的资源(RAM),并且仍然相当快。
但我建议您考虑一下您的数据模型,并可能对其进行优化。事实上,您必须使用基于 UNION 的查询通常意味着有优化的空间,通常通过合并三个表,并添加一个“类型”字段(名称根本不好,但您明白我的观点)。
归档时间: |
|
查看次数: |
1776 次 |
最近记录: |