MySQL - 基于更多索引的查找

标签 mysql sql indexing

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

我有一个包含以下列的表格:

relation:
- type varchar(32)
- id_foo int
- id_bar int

我需要根据 typepresta_idvario_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

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

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

最佳答案

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

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

MySQL 实际上有关于复合索引使用的非常好的文档。请参阅here .

关于MySQL - 基于更多索引的查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25327070/

相关文章:

mysql - 表上的 (SQL) JOINING 是否始终会创建这些表的笛卡尔积?

php - PHP 中的 SQL 语句错误,但 SQL 中正常

sql-server - 是否可以在 SQL Server 2005/SQL Server 2008 的 XML 列中设置索引?

php:将索引二维数组转换为按包含值关联索引的二维数组的最简单方法?

sql - SSRS转换日期和groupby

r - 如何在R中的列表中找到最大的N个元素?

mysql - 从一个引用表中获取 MySql 中标签的多个唯一随机行

php - 如何在 select 语句中使用 'between'

Python/MySQL 时间

mysql - 在一对多上构建 SQL 查询