如何将MySQL组合索引为?

摘要:MySQL组引合索优化SQL 我的场景 200w左右的数据,后面会更多 使用定时任务爬取数据插入到自己的数据库。要保证数据的唯一性,所以我用了组合唯一索引。 表结构 最初的组合索引 SQL执行和explain 由于对索引的知识了解的不多,后
MySQL组引合索优化SQL 我的场景 200w左右的数据,后面会更多 使用定时任务爬取数据插入到自己的数据库。要保证数据的唯一性,所以我用了组合唯一索引。 表结构 最初的组合索引 SQL执行和explain 由于对索引的知识了解的不多,后来了解到由于组合索引的最左原则导致该索引在这个SQL查询的时候是没什么效果的。 根据explain得知,我的查询类型是index类型的,index类型 Full Index Scan。会扫描所有的索引,比它差的就只有全文扫描了~~! 最左原则 复合索引在建立的时候比如 UNIQUE KEY un_key (a,b,c) 实质上等于创建了三个索引 a a,b a,b,c where条件是 a a,b a,b,c的时候会用到索引 type=ref 扫描的行数会很少 where条件是 a,c的时候,只有a会用到索引,c不会 type=ref 但是扫描的行数会比较多 where条件是 b,c的时候,则会扫描全部索引 type=index 根据最左原则,我修改了索引顺序 修改索顺序后SQL语句执行 阿里巴巴Java开发手册中的索引规约 SQL 性能优化的目标:至少要达到 range 级别,要求是 ref 级别,如果可以是 consts 最好。 这里已经达到了ref级别 扫描的行数等于查询出来的数据量,key的长度降低了三分之一。查询性能已经很好了