0

说,我有一个带有索引的表(field1,field2,field3)。我使用 执行查询WHERE field2 = A AND field3 = B。在这种情况下,MySQL 不会使用提到的密钥。所以,问题是:是否有一个 RDBMS 会使用这个索引?我的意思是 - 有效地使用它?

PS 请不要告诉我在表格中添加额外的键。我只想知道支持上述功能的 RDBMS(如果有的话)。

提前致谢。

4

2 回答 2

0

所以我不确定你为什么认为 MySQL 不支持这种行为——确实EXPLAIN告诉你 othewise? (对不起,我看错了问题)

你是对的:来自MySQL docs on multiple-key index:

如果列不构成索引的最左前缀,则 MySQL 无法使用索引执行查找。假设您有此处显示的 SELECT 语句:

SELECT * FROM tbl_name WHERE col2=val2 AND col3=val3;

如果 (col1, col2, col3) 上存在索引,则上述查询确实涉及索引列,因为 (col2, col3) 不是 (col1, col2, col3) 的最左侧前缀。

如果您反对添加另一个索引(如其他人所建议的那样),我对 MySQL 的唯一建议可能是创建 2 个单列索引并尝试从更新版本的 MySQL 中可用的索引合并优化中受益。这是否更有效取决于这些单独索引的基数,以及查询负载的其余部分是什么样的。

于 2013-03-01T12:24:17.023 回答
0

对明显问题的最明智的答案似乎是创建另一个索引。

create index on table_name (field2, field3);

如果 MySQL 的优化器决定不将该索引用于您描述的查询,我会感到惊讶。

于 2013-03-01T14:29:32.613 回答