MySQL组合索引

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的长度降低了三分之一。查询性能已经很好了

posted @ 2021-03-03 16:39  实习小生  阅读(574)  评论(0编辑  收藏  举报