Mysql 性能比较,通过子查询或联接表获取concat字符串?

Mysql 性能比较,通过子查询或联接表获取concat字符串?,mysql,Mysql,我有一个查询需要从另一个表中获取多个字段,下面哪一个会更快 一, 选择*,选择CONCATfieldA,“|”,从表B中选择fieldB,其中bid=id为表A中的moreField 二, 从tableA中选择tableA.*、tableB.fieldA、tableB.fieldB,并在bid=id上连接tableB 实际上,我需要fieldA和fieldB作为分隔的值,所以在第一种情况下,我将使用PHP中的explode“|”,moreField在查询后将它们分隔开。我只是想知道哪个查询会更快

我有一个查询需要从另一个表中获取多个字段,下面哪一个会更快

一, 选择*,选择CONCATfieldA,“|”,从表B中选择fieldB,其中bid=id为表A中的moreField

二, 从tableA中选择tableA.*、tableB.fieldA、tableB.fieldB,并在bid=id上连接tableB


实际上,我需要fieldA和fieldB作为分隔的值,所以在第一种情况下,我将使用PHP中的explode“|”,moreField在查询后将它们分隔开。我只是想知道哪个查询会更快。

根据我的经验,嵌套查询速度很慢

如果您需要具体的结果,您可以:

SELECT tableA.*, tableB.fieldA, tableB.fieldB, CONCAT(tableB.fieldA,'|',tableB.fieldB) as moreField 
FROM tableA INNER JOIN tableB ON bid=id

但是你说你实际上需要分开的值,所以就用你的第二个解决方案。

你试过运行它们来看看哪一个更快吗?我投票结束这个问题,因为关于性能比较的问题太广泛了,提问者很容易提出,只需一点努力。2是做这件事的标准方法,它真的会引起问题吗?与1不同的是,如果任何一列都为null,那么它将不会返回null。除了性能之外,1是可怕的,并且会使您的速度变慢,包括现在的额外逻辑和将来的调试/维护/扩展任务。如果1比2优化得更好,MySQL将有点混乱,但是@PhiterFernandes建议您可以自己尝试。