首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于更多索引的MySQL查找

基于更多索引的MySQL查找
EN

Stack Overflow用户
提问于 2014-08-15 13:16:01
回答 3查看 27关注 0票数 0

MySQL可以使用两个或多个索引搜索表行吗?

我有一张有这些列的桌子:

代码语言:javascript
复制
relation:
- type varchar(32)
- id_foo int
- id_bar int

我需要基于typepresta_idvario_id搜索行。查询将如下所示:

代码语言:javascript
复制
SELECT id_foo FROM relation WHERE type = 'baz' AND id_bar = 128
SELECT id_bar FROM relation WHERE type = 'qux' AND id_foo = 256

为这个表和这些搜索查询定义索引的正确方法是什么?

是在所有三列(typeid_fooid_bar)上放置单独的索引,还是创建两个多列索引type + id_footype + id_bar更好?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-15 13:18:52

最好创建两个索引:relation(type, id_bar)relation(type, id_foo)

在您的示例中,这两列都可以按任意顺序排列。但是您需要两个索引来优化这两个查询。

实际上,MySQL在使用复合索引方面有相当好的文档。见这里

票数 1
EN

Stack Overflow用户

发布于 2014-08-15 13:19:02

是的MySQL可以。你可以通过发布:

代码语言:javascript
复制
EXPLAIN SELECT id_foo FROM relation WHERE type = 'baz' AND id_bar = 128

MySQL打印使用了哪些索引。

多列索引(type,id_bar和type,id_foo;为了加快两个select查询速度都需要这两者)是加速这类查询的一种可能的方法,但是,多列索引并不是在所有情况下都有意义的。例如,如果您有不包括类型的查询,那么类型和id_bar上的多列索引(按这个顺序排列)不会有帮助。

http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.htmlhttp://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html

票数 1
EN

Stack Overflow用户

发布于 2014-08-15 13:18:48

为您计划拥有的WHERE子句的每种类型创建索引。typeid_bar上的一个联合索引将有助于第一个查询。typeid_foo的另一个联合指数将对第二个指数有所帮助。

一个索引将所有3组合在一起将不会有帮助,因为它对任何单个查询都不够具体。

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

https://stackoverflow.com/questions/25327070

复制
相关文章

相似问题

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