首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化具有多连接条件的SQL查询

优化具有多连接条件的SQL查询
EN

Stack Overflow用户
提问于 2016-12-08 13:04:18
回答 1查看 72关注 0票数 0

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

代码语言:javascript
复制
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

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

我想得到产品总数的类别列表。我写了以下查询:

代码语言:javascript
复制
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分钟来处理我提到的数据量。我想缩短执行时间。

诚挚的问候

EN

回答 1

Stack Overflow用户

发布于 2016-12-08 14:15:44

据我所知,在"ON“或"WHERE”中的每一个" or“都是非常昂贵的。这听起来很愚蠢,但我建议你做3个单独的小选择与联合所有结合在一起。对于mysql和postgresql中的类似问题,我们都是这样做的,在某些情况下,当我们得到“资源超过”时,我们也必须对bigquery这样做。因此,这是非常愚蠢的,你会有更多的工作,但它肯定是有效的,它在产生结果比许多“或”的更快。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41040224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档