暂无图片
msyql前导列索引问题
我来答
分享
zxy
2021-03-31
msyql前导列索引问题

我建立一个组合索引,在查询的时候不使用这个这个组合索引的前导列进行查询但还是走索引,请教各位!

-----------------------------------------------------------+ | Table | Create Table | +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | t | CREATE TABLE `t` ( `name` varchar(20) DEFAULT NULL, `age` int(29) DEFAULT NULL, `local` varchar(30) DEFAULT NULL, KEY `xxoo` (`name`,`age`,`local`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | select count(*) from t; +----------+ | count(*) | +----------+ | 10000 | +----------+ 1 row in set (0.02 sec) explain select name from t where local='xx33'; +----+-------------+-------+------------+-------+---------------+------+---------+------+-------+----------+--------------------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------------+-------+---------------+------+---------+------+-------+----------+--------------------------+ | 1 | SIMPLE | t | NULL | index | NULL | xxoo | 61 | NULL | 10161 | 10.00 | Using where; Using index | +----+-------------+-------+------------+-------+---------------+------+---------+------+-------+----------+--------------------------+ 1 row in set, 1 warning (0.00 sec)
我来答
添加附件
收藏
分享
问题补充
3条回答
默认
最新
Cui Hulong

可以通过OPTIMIZER_TRACE 看看。应该走索引的
“best_covering_index_scan”: {
“index”: “xxoo”,
“cost”: 0.35,
“chosen”: true
},
MySQL5.7 后期的版本 ,8.0版本 应该不走全表扫描,基本走覆盖索引了。

暂无图片 评论
暂无图片 有用 0
暂无图片
姚崇

因为你表上只有1个索引,这个sql MySQL考虑xxoo这个索引也很正常,可以使用optimier_trace具体分析下

暂无图片 评论
暂无图片 有用 0
chengang

你这个是走的索引扫描,mysql认为,扫描你这棵二级索引树,花费更少。

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏