根据MySQL documentation,如果我有多列索引,则该索引也将自动用作该索引中任何左前缀列的索引。文档中的示例说,
假设表具有以下规范:
CREATE TABLE test ( id INT NOT NULL, last_name CHAR(30) NOT NULL, first_name CHAR(30) NOT NULL, PRIMARY KEY (id), INDEX name (last_name,first_name) );
name
索引是last_name
和first_name
列的索引。该索引可用于查询中的查询,这些查询指定last_name
和first_name
值组合的已知范围内的值。它也可以用于仅指定last_name
值的查询,因为该列是索引的最左前缀(如本节稍后所述)。
此问题和答案也解释了同一件事:https://stackoverflow.com/a/48827874/473792
MariaDB中的多列索引是否也具有此属性?我知道MariaDB是从MySQL派生的,但是我不确定这个相对深奥的细节在两个引擎上是否相同。
答案 0 :(得分:1)
是的。所有使用B树索引的数据库都是如此。
如果索引不正确,索引的效率将大大降低。
答案 1 :(得分:1)
MariaDB documentation指的是MySQL 5.7 InnoDB版本编号,因此5.7中的所有功能都应在MariaDB 10.2或更高版本中。
此外,this tutorial提出了一个类似的问题,这使我相信这是InnoDB行为的固有部分。