暂无图片
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
打赏 0
暂无图片
姚崇

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

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

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

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
在windows系统上,mysql8如何设置大小写敏感
回答 8
已采纳
2个条件:安装的时候指定参数lowercasetablenames0并且需要windows系统中data目录设置为大小写敏感就可以。
MySQL 5.7 升级mysql8 需要注意什么?
回答 1
密码插件onlyfullgroupby改变
MySQL新建一个触发器报错:1064
回答 1
这个报语法错误。ifthen这里不对。另外推荐不要使用触发器。
MySQL 或者其他数据库处理事务是串行的?不能进行并发处理吗?
回答 1
已采纳
不管你怎么并发写binlog你解析看看都是一条条写入吧?并行读,但是是顺序写。并行读就是并发处理呀。至于写为了一致性所以要有锁啊。必须一个释放才能操作进行啊。
触发器 操作的是2张不同的表 提示: Can't update table 'test' ,update 的那张表 没有任务的关联触发器,是什么原因?
回答 1
这个提示像是触发器代码中,对触发器中涉及的表又做了DML操作,这可能会导致死循环。即一个初始的UPDATE,导致调用了触发器,而触发器又对这个表做了UPDATE,这次的UPDATE又会导致再次调用触发
mysql数据导入oracle , 表结构不一致怎么办?
回答 4
已采纳
oracle有很多方法可以查看表结构。如果你对sql不熟悉,建议使用PLSQLDeveloper软件或navicat连接到oracle数据库,编辑对应表的表结构即可。
mysql 区分大小写
回答 2
已采纳
设置lowercasetablenames1,此时是表名大小写不敏感,即忽略大小写
MySQL truncate对事务还有索引会不会产生影响?
回答 1
TRUNCATETABLE将在事务块中间导致隐式提交,不影响索引
mysql中通过哪个系统表能标识出哪些表是普通表,哪些表是视图,哪些是分区表?
回答 1
selectfrominformationschema.tables;tabletype字段就可以区分。
多台机器连接MySQL数据库会引发锁的问题吗?
回答 1
已采纳
你是问会不会产生死锁吧,这个问题答案是即可能引发,也可能不会引发。锁背后的原因是阻止资源争抢,保证一致性。当发生了相互锁等待,死锁便产生了。所以光连接是不会产生死锁的,具体会不会产生是看你对数据库做的