例子一:
CREATE TABLE t ( a char(32) not null primary key, b char(32) not null, KEY idx1 (a,b), KEY idx2 (b,a) ) Engine=InnoDB;
idx1 和 idx2 两个索引内部大小完全一样、没有区别
例子二:
CREATE TABLE t ( a char(32) not null, b char(32) not null, c char(32) not null, d char(32) not null, PRIMARY KEY (a,b) KEY idx1 (c,a), KEY idx2 (d,b) ) Engine=InnoDB;
这个表 InnoDB 会自动补全主键字典、idx1 实际上内部存储为 (c,a,b),idx2 实际上内部存储为 (d,b,a)
但是这个自动添加的字段、Server 层是不知道的、所以 MySQL 优化器并不知道这个字段的存在、那么如果你有一个查询:
SELECT * FROM t WHERE d=x1 AND b=x2 ORDER BY a;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26515977/viewspace-1208115/ ,如需转载,请注明出处,否则将追究法律责任。