首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用IN运算符优化MySQL查询

使用IN运算符优化MySQL查询
EN

Stack Overflow用户
提问于 2010-03-09 18:23:46
回答 1查看 2.6K关注 0票数 1

我有一个MySQL数据库,里面有一个相当大的表,里面有产品。它们中的每一个都有自己的id和categoryId字段,其中有一个类别id属于该产品。现在,我有一个从给定类别中提取产品的查询,例如:

代码语言:javascript
运行
复制
SELECT * FROM products WHERE categoryId IN ( 1, 2, 3, 4, 5, 34, 6, 7, 8, 9, 10, 11, 12 )

当然,使用WHERE子句和ORDER BY sort,但不是在这里。假设这些产品是250k,每天的访问量超过100k。在这样的条件下,slow_log在表中注册了这些具有较大生成时间的查询的权重。

你有任何想法如何优化给定的问题吗?

表引擎为MyISAM。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-03-09 18:31:26

在这种情况下,categoryId上的索引将不起作用,in (...)查询将生成序列扫描,而不是索引查找。

我会考虑首先重新设计系统,去掉多个类别选择,如果不合适,则缓存查询结果。

例如,您可以创建一个items_category_groups( hash,item_id)帮助器表,在客户端查询多个类别之后,散列它们的组合ids并查找该表。如果找不到,则执行代价高昂的查询并填写此表。如果找到,则执行一个连接这些表的廉价查询。其他缓存工具,如memcached也可以使用。

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

https://stackoverflow.com/questions/2408250

复制
相关文章

相似问题

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