摘要
最近遇到一个慢sql,在排查过程中发现和分库分表后的索引设置有关系,总结了下问题。
问题
在进行应用健康度盘点时,发现有个慢sql
如下
select brandgoodid from brandgood_0020
where userid = xxx AND
brandgoodid in("xxx1","xxx2")
表结构,按照userid进行的分表。
CREATE TABLE`brandgood_0020` (
`brandgoodid` char(30) NOT NULL COMMENT ,
`user_id` int(10) unsigned DEFAULT NULL COMMENT '用户id',
`created` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`last_modified` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`deleted` bit(1) NOT NULL DEFAULT b'0',
PRIMARY KEY (`brandgoodid`),
KEY `idx_userid` (`userid`) USING BTREE,
) ENGINE=InnoDB DEFAULT CHARSET=utf8
explain
一下发现走的是userid这个索引,一个用户下面有很多商品,也就有了很多brandgoodid,所以有可能会很慢