遇到一个索引失效的问题,先记录下,再研究研究
数据表结构
CREATE TABLE `ns_delivery_shop` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`goods_id` int(10) NOT NULL COMMENT '商品ID',
`sku_id` int(10) NOT NULL COMMENT '商品SKU',
`shop_id` int(10) NOT NULL COMMENT '代理商ID',
`stock` int(10) NOT NULL COMMENT '库存',
`sales` int(10) NOT NULL COMMENT '销量',
`create_time` int(10) NOT NULL COMMENT '时间',
PRIMARY KEY (`id`),
KEY `idx_shop_id` (`shop_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COMMENT='代理商打货表';
插入数据
INSERT INTO `ns_delivery_shop`(`id`, `goods_id`, `sku_id`, `shop_id`, `stock`, `sales`, `create_time`) VALUES (1, 86, 99, 1, 10, 5, 1613960196);
INSERT INTO `ns_delivery_shop`(`id`, `goods_id`, `sku_id`, `shop_id`, `stock`, `sales`, `create_time`) VALUES (2, 86, 100, 1, 15, 10, 1613960196);
INSERT INTO `ns_delivery_shop`(`id`, `goods_id`, `sku_id`, `shop_id`, `stock`, `sales`, `create_time`) VALUES (3, 86, 101, 1, 25, 10, 1613960196);
INSERT INTO `ns_delivery_shop`(`id`, `goods_id`, `sku_id`, `shop_id`, `stock`, `sales`, `create_time`) VALUES (4, 101, 119, 9, 30, 5, 1613960196);
INSERT INTO `ns_delivery_shop`(`id`, `goods_id`, `sku_id`, `shop_id`, `stock`, `sales`, `create_time`) VALUES (5, 101, 119, 11, 30, 5, 1613960196);
INSERT INTO `ns_delivery_shop`(`id`, `goods_id`, `sku_id`, `shop_id`, `stock`, `sales`, `create_time`) VALUES (6, 101, 119, 12, 30, 5, 1613960196);
索引失效的 sql
当 shop\_id = 1 的条数小于等于 2 时可以使用索引,大于 2 时索引失效
EXPLAIN SELECT stock FROM `ns_delivery_shop` WHERE shop_id = 1

当查询数据量占比总数据量超过一定阈值,MySQL会觉得扫描全表更快,选择不走索引