Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-基于更多索引的查找_Mysql_Sql_Indexing - Fatal编程技术网

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

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 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_栏上的多列索引(按此顺序)将不起作用

看到和