据我所知,在查询中应尽可能避免使用or。
我有两张桌子有一对多的关系。
我加入了两张桌子如下所示。
SELECT A.*, group_concat(B.info separator ','), group_concat(B.info2 separator ',')
FROM A
JOIN B
ON A.id = B.a_id
GROUP BY A.id;使用GROUP_CONCAT是否会像or在MySQL中那样影响性能?如果是这样,那么加入这些表的有效方法是什么呢?
如有任何建议或建议,将不胜感激。谢谢。
发布于 2018-01-25 03:47:50
因此,GROUP_CONCAT对于涉及字符串的MySQL来说是一项额外的工作,因此您应该预期会有一些慢下来,但请放心,它不会影响MySQL的性能。
要连接这些表,可以使用MySQL拥有的那些联接命令。比如内部连接,完全连接,等等。看看这个https://www.tutorialspoint.com/mysql/mysql-using-joins.htm。
发布于 2018-01-25 12:44:59
学习一些模糊的“规则”(比如“应该避免OR”或"group_concat是慢的“)通常并不能很好地满足您的兴趣。
这两种说法都不正确,它们只有真理的基本要素。
使用正确的能力来完成你的目标,同时理解有时你的兴趣是通过修改你的目的来满足你的内在限制。
如果优化器没有有效的方法来适应分组,那么使用GROUP BY (不仅仅是GROUP_CONCAT)会导致性能下降。但这与是否使用GROUP BY无关。如果你需要它,那你当然应该用它..。但是,与没有索引的扫描磁盘和排序相比,操纵字符串是一种蛋糕式的方式,连接所消耗的CPU周期就在噪声地板附近。
这里的目的是了解优化器如何看待您的查询,以及它计划如何解决它。如果您想要获得良好的性能,使用EXPLAIN SELECT ...来验证服务器是否做出了明智的选择(并且您已经编写了合理的查询)对您来说应该是第二天性。
https://dev.mysql.com/doc/refman/5.7/en/explain.html#explain-execution-plan
解释输出似乎有点黑暗的艺术,但你会发现它是值得的努力。
https://dba.stackexchange.com/questions/196190
复制相似问题