如图这样一条SQL,索引是联合索引(neIdentity, parameterName, instanceNum),但是为什么会走using filesort。
后来经过分析才得知,原来在多列索引在建立的时候是以B-树结构建立的,因此建立索引的时候是先建立neIdentity的按顺序排的索引,在相同neIdentity的情况下建立parameterName按 顺序排的索引,最后在parameterName相同的情况下建立按instanceNum顺序排的索引,如果列数更多以此类推。
所以如果是EXPLAIN select * from paramdiff where neIdentity = "001710-HeNB-A01B1800034D" ORDER BY parameterName
这样不会走file去排序,会根据索引排序。
结论:针对以上SQL优化,建立(neIdentity, instanceNum)索引,其实不建索引我觉得更好,本身排序的数量不多,但是数据量大的时候 还是要用这个思路优化。