原来MySQL中建立联合索引,
并不是对其字段的所有子集也建立了索引,
而是遵从了最左匹配原则。
这个例子里我们只相当于建立了
class_code的单独索引,
class_code和student_code 建立的联合索引
和由所有字段组成的联合索引。
因为,生成索引时,是先对class_code排序,
再对student_code排序,
最后再对subject_name排序。
如果单独看第二第三列,
结果就是无序的,
查询时自然不能提速了。
假若你需要在这三个字段的任意组合都能实现索引,
那么就要一共建立
(class_code, student_code, subject_name),
(student_code, subject_name),
(subject_name)
三个normal key。
如果你对一张表的多个字段要建立索引,
那么就需要需要添加n多个的normal key,十分麻烦。
人家postgreSQL支持的联合索引的子集就比MySQL不知高到哪里去了。