gpt4 book ai didi

mysql - 优化具有多个连接条件的 SQL 查询

转载 作者:行者123 更新时间:2023-11-29 11:08:13 24 4
gpt4 key购买 nike

我有两个 mysql 表,如下所示:

table_category
-----------------
id | name | type
1 | A | Cloth
2 | B | Fashion
3 | C | Electronics
4 | D | Electronics

table_product
------------------
id | cat_cloth | cat_fashion | cat_electronics
1 | 1 | 2 | 3
1 | NULL | 2 | 4

此处 cat_cloth, cat_fashion, cat_ electronics 是来自 table_category 的 ID

最好有另一个类别类型表,但我现在需要一个快速解决方案。

我想获取包含产品总数的类别列表。我编写了以下查询:

SELECT table_category.*, table_product.id, COUNT(table_product.id) as count
FROM table_category
LEFT JOIN table_product` ON table_category.id = table_product.cat_cloth
OR table_category.id = table_product.cat_fashion
OR table_category.id = table_product.cat_electronis
GROUP BY table_product.id
ORDER BY table_product.id ASC

问题:我编写的 sql 有效,但我有超过 14K 类别和 50K 产品,并且 sql 运行速度非常慢。我添加了 cat_* id 的索引,但没有任何改进。我的问题是如何优化这个查询?

我发现查询需要 3-4 分钟才能处理我提到的数据量。我想减少执行时间。

最诚挚的问候

最佳答案

据我所知,“ON”或“WHERE”部分中的每个“OR”都非常昂贵。这听起来很愚蠢,但我建议您将 3 个独立的小选择与 UNION ALL 组合在一起。我们在 mysql 和 postgresql 中都遇到了类似的问题,并且在某些情况下,当我们遇到“资源超出”的情况时,我们也必须对 bigquery 执行此操作。所以这是非常愚蠢的,你将有更多的工作,但它确实有效,并且产生结果比许多“OR”要快得多。

关于mysql - 优化具有多个连接条件的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41040224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com