sql - 什么时候多查询而不是多连接更好?

标签 sql performance select join

SO中有很多类似“多查询与单查询”类型的问题。
但是我没有看到任何具有一般性结论的内容,因此我对此仍然感到困惑。

所以,我会用其他方式问它:

什么时候运行多个查询而不是具有多个连接的单个查询更好?

我不是在要求琐碎的情况,显然连接两个或 3 个表比执行 3 个查询要快得多。

我正在考虑例如您有 10 个以上连接的情况,其中一些连接是多对多关系,因此您的最终查询具有 GROUP_CONCAT、LEFT 和 INNER 连接的混合等。

例如,您需要产品名称、所有图片、所有标签、所有视频,以及您可以购买的所有方向。
最好使用复杂的连接和 group_concat 进行很长的查询(如果您不能使用 distinct ,这在很多时候真的很难管理),或者执行产品详细信息查询、图像查询、另一个查询标签等?

如果它有助于澄清问题,我可以写一个特定的例子。但我希望这种情况的一般规则。
极限在哪里?当带有连接的单个查询比多个查询更糟糕时?

而且,在这些情况下,最好运行多个 SELECT 查询:
在事务中运行它们更快(自动提交 = false)?
将单个查询中的多个选择与多个子选择合并是否更快?

谢谢 !

最佳答案

Where is the limit? when a single query with Joins is worst than multiple queries?



我认为划定界限并不容易,这在很大程度上取决于您的场景和情况。可能有多种因素,例如索引、分区、连接列、行数、查询结构等。

多个连接,例如连接 5 列,其中连接列是键,大多数行的值不同(例如性别)并且具有适当的索引可能比仅连接两个没有适当索引的表的查询更快。

我想人们可能会为自己设定限制,例如您可以决定这个特定用例(例如插入或选择)不得超过 1 秒,如果花费超过 1 秒,则可能需要更多优化。

关于sql - 什么时候多查询而不是多连接更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8417004/

相关文章:

mysql - SQL = SUM 总计

mysql - 如何对具有与另一个名称表相关的两列外键的表执行 mysql 选择查询

mysql - 组合两个 SQL 语句,其中在多对多关系中两者都必须为 true

sql - 模糊时间戳加入 Postesql 并获得更好的速度

asp.net - 查找同一列的行之间的差异(时间数据之间的差异)

sql - 用于 250K+ 字符串的通配符搜索的 Fast(er) 方法

c - 将 char * 重新解释为用于只读操作的另一种原始类型的数组的任何合法方法?

php - 从 PHP 数组中高效地挑选 n 个随机元素(无随机播放)

javascript - 更快地操作现有的 HTML 或删除 HTML 然后重新创建它?

javascript - 自动选择 html 选择标签的前一个和下一个选项