我有两个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_* ids添加了索引,但没有改进。我的问题是如何优化这个查询?
我发现这个查询需要3-4分钟来处理我提到的数据量。我想缩短执行时间。
诚挚的问候
发布于 2016-12-08 14:15:44
据我所知,在"ON“或"WHERE”中的每一个" or“都是非常昂贵的。这听起来很愚蠢,但我建议你做3个单独的小选择与联合所有结合在一起。对于mysql和postgresql中的类似问题,我们都是这样做的,在某些情况下,当我们得到“资源超过”时,我们也必须对bigquery这样做。因此,这是非常愚蠢的,你会有更多的工作,但它肯定是有效的,它在产生结果比许多“或”的更快。
https://stackoverflow.com/questions/41040224
复制相似问题