(1)什么时候设计索引? 当基本的功能都跑通了之后尽可以考虑建立索引了,这个时候查不到知道了大概的SQL语句。
    先设计完表之后,进入系统开发环节也就是说根据需求文档逐步将Java业务代码写好,在写代码过程中,一般都是用Mybatis作为持久层框架,肯定会写很多的MyBatis的DAO和Mapper以及Mapper,当系统差不多开发完毕,功能都跑通了,此时可以考虑建立索引,因为系统里所有的MyBatis的SQL语句都已经写完了,完全知道对每张表会发起些什么样的查询语句。

    (2)第一个索引设计原则
    针对SQL语句里的where条件,order by 条件以及group by条件 设计索引。就是where条件根据哪些字段来筛选数据?order by根据哪些字段排序?group by根据哪些字段分组聚合?此时就可以设计一个或者两三个联合索引,每一个联合索引都尽量包含 where ,order by ,group by 里的字段,接着检查每个SQL语句,是不是每个where,order by,group by 后面跟的字段顺序都是某个联合索引的最左侧字段开始的部分字段?
    比如有一个联合索引 INDEX(a,b,c), 此时一看发现包含了 where a=? and b=? , order by a,b ,group by a 这部分,那么此时where ,order by,group by,后续跟的字段都是联合索引的最左侧开始的部分字段。这就可以了,说明每个SQL语句都会用上索引。
    所以在设计索引的时候,首先第一条,就是按照这个原则,保证每个SQL语句的where ,order by和group by 都可以用上索引。