MySQL-基于更多索引的查找
MySQL可以使用两个或多个索引搜索表行吗 我有一个包含以下列的表:MySQL-基于更多索引的查找,mysql,sql,indexing,Mysql,Sql,Indexing,MySQL可以使用两个或多个索引搜索表行吗 我有一个包含以下列的表: relation: - type varchar(32) - id_foo int - id_bar int 我需要根据type和presta\u id或vario\u id搜索行。查询将如下所示: SELECT id_foo FROM relation WHERE type = 'baz' AND id_bar = 128 SELECT id_bar FROM relation WHERE type = 'qux' AND
relation:
- type varchar(32)
- id_foo int
- id_bar int
我需要根据type
和presta\u id
或vario\u id
搜索行。查询将如下所示:
SELECT id_foo FROM relation WHERE type = 'baz' AND id_bar = 128
SELECT id_bar FROM relation WHERE type = 'qux' AND id_foo = 256
为这个表和这些搜索查询定义索引的正确方法是什么
我应该在所有三列(
type
,id\u-foo
,id\u-bar
)上放置单独的索引,还是最好创建两个多列索引-type+id\u-foo
和type+id\u-bar
?为您计划拥有的每种类型的WHERE子句创建一个索引。在类型
和id\u栏
上的一个联合索引将有助于第一次查询。另一个关于type
和id\u foo
的联合索引将有助于第二个
一个将所有3个索引结合起来的索引不会有帮助,因为它对任何单个查询都不够具体。最好创建两个索引:
关系(type,id\u bar)
和关系(type,id\u foo)
在您的例子中,这两列可以是任意顺序。但是您需要两个索引来优化这两个查询
MySQL实际上有很好的关于复合索引使用的文档。请参阅。是的,MySQL可以。您可以通过以下方式了解自己:
EXPLAIN SELECT id_foo FROM relation WHERE type = 'baz' AND id_bar = 128
没有使用哪些索引
多列索引(type、id\u bar和type、id\u foo;为了加速这两个select
查询,您需要这两个索引)是加速此类查询的一种可能方法,但是,多列索引并非在所有情况下都有意义。例如,如果您有不包含类型的查询,则类型和id_栏上的多列索引(按此顺序)将不起作用
看到和