我有表T1,其中列A是主键,列B是外键,外键是表T2中的主键。我想在T1中创建一个索引,一个复合索引,如(B,A)。但是MySQL只允许我将索引创建为(A,B)。是因为B列是外键吗??请解释一下
发布于 2011-01-19 19:07:43
这对我来说很好:
CREATE TABLE t2 (id INT NOT NULL PRIMARY KEY) ENGINE=InnoDB;
CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY, b INT NOT NULL REFERENCES t2(id)) ENGINE=InnoDB;
CREATE INDEX ix_t1_b_a ON t1 (b, a);尽管InnoDB确实将聚集键作为行指针包含在索引中,但没有任何东西阻止显式添加该字段,有时需要使用它来优化某些查询。
请检查您的语法。
发布于 2011-01-05 16:55:08
我认为这是没有意义的。您正在尝试使用已经是唯一的列(主键是唯一的)来构建复合索引。
发布于 2011-01-05 16:58:10
由于您使用InnoDB作为存储引擎,因此仅列B上的索引将包含列A(主键)
http://www.mysqlperformanceblog.com/2006/10/03/mysql-optimizer-and-innodb-primary-key/
https://stackoverflow.com/questions/4602198
复制相似问题