索引机制

 
mysql只是在where语句中的条件中自动建联合索引
    order by字段不参与自动联合索引
 可以使用explain 解析sql来看sql的可用性和优化方向
 
1.索引与查询条件的顺序没有关系,但和索引中第一个字段有关系,只要查询条件中包含第一个字段,type就是ref的,如果查询语句中不包含第一个字段,但包含其他字段,也会使用到索引,但type就是index
2.索引的选择问题,每次选择索引都是按顺序选择的,按顺序只要找到包含条件中任意字段的索引就使用了,
测试的时候条件中a,b,c都有,加了多个索引,,比如索引顺序为(a),(a,b,c),这样的话使用(a)这个索引,
如果是(a,b)(a,b,c),(a)这样的顺序,这样的话使用(a,b)这个索引,如果是(a,b,c),(a),(a,b)这样的顺序,这样的话使用(a,b,c)这个索引
3.orderby的filesort问题:
使用前面的四个字段order by时,不会出现filesort。但后面两个个在order by的时候就会出现useing filesort;
我把createDate调整到了第二,再使用order by createDate 时,就没有useing filesort;但是把student_id调到最后。也没有出现filesort(这个地方有些奇怪)
 
 
1.实际上是使用了两个索引的,一张表一个索引。
2.关联索引使用了主键索引,resource_product表的索引type是eq_ref,resource_recommend_product表type为index,没有filesort
 
 
总结:
sql优化需要多尝试,mysql没有那么智能。hibernate生成的sql不太靠谱,觉得需要高性能的地方或数据量大的地方直接使用sql,并且指定索引。