关于mysql大于号小于号是否会使用到索引

表代码:

CREATE TABLE `t_user1` (
  `id` int(2) NOT NULL AUTO_INCREMENT,
  `name` char(20) NOT NULL,
  `useremail` char(20) NOT NULL,
  `PASSWORD` char(20) NOT NULL,
  `number` int(3) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `t_user_name` (`name`),
  KEY `t_user_email` (`useremail`),
  KEY `index_number` (`number`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

往里面添加数据
需要的sql

SELECT * from t_user1;
explain SELECT * from t_user1 where useremail = '123@qq.com';
alter table t_user1 add number int(3) unsigned not Null ;
desc t_user1;
update t_user1 set number = 16 where id=3;
create INDEX index_number on t_user1(number);
explain SELECT * from t_user1 where number = 2; -- 使用了索引
explain SELECT * from t_user1 where number > 2;-- 使用了索引
explain SELECT * from t_user1 where useremail like '123@qq.com';-- 使用了索引
-- explain SELECT * from t_user1 where useremail like '123%';-- 有没有使用了索引(有待论证)
explain SELECT * from t_user1 where useremail like '%123%';-- 没使用了索引

图片
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

explain中每一个列都是有特定意义的,我们今天就来聊一聊key_len

这个字段和负载有关系。
单列索引我们不用去计算,因为没有意义,如果是组合索引,那么知道这里的长度就是非常有意义的,我们先简单来看看这个单列索引的key_len是如何计算的。
查询的资料
时间:2020.7.31
事件,这篇博文有网友提出有点问题,我就把这篇博文私密访问了,打算处理完在公开,只是没想到拖了这么久。开始分析问题:

-- explain SELECT * from t_user1 where useremail like '123%';-- 没使用了索引(有待论证)

提出 like '123%'的情况下是走索引的,但是我在环境里运行的结果是没有走索引,如图

explain SELECT * from t_user1 where useremail like '123%';

在这里插入图片描述
key里面没有东西,只有possible_key里面有,那么问题出现在哪里?
想想。

大家看type —— all,发现问题了吧,
这个出现误区的问题有两个,1.useremail的数据太相近,2.like的筛选太相近
我的插入数据:

INSERT into t_user1 (`name`,useremail,`PASSWORD`,number ) values 
('张三','123@qq.com','123@qq.com',3),
('李四','1234@qq.com','1234@qq.com',4),
('王五','12345@qq.com','12345@qq.com',5),
('陈六','123456@qq.com','123456@qq.com',6)

我们在记录不变的情况下改变like的筛选

explain SELECT * from t_user1 where useremail like '123@%';

在这里插入图片描述
key里是有值的。
发现问题背后的问题:某些情况下,输出全部的数据,它就没走索引。
感谢网友@慕枫520 和 @qq_40104261 谢谢你们的指出,不然的话我可能会误导更多的伙伴

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
大于号小于号在MyBatis中需要进行转义,否则出现意想不到的错误。这是因为在MyBatis的mapper XML文件中,大于号小于号被视为标签符号,与SQL中的符号发生冲突,导致解析过程出现问题。为了解决这个问题,可以采用两种方案。 方案一是使用转义写法,将大于号小于号替换为对应的转义字符。例如,将大于号替换为"&gt;",将小于号替换为"&lt;"。 方案二是使用CDATA标记,将SQL语句包裹在<![CDATA<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [MyBatis中大于小于号的转义写法](https://blog.csdn.net/weixin_35976295/article/details/113338260)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [java MyBatis中大于小于号的转义写法](https://blog.csdn.net/csdndys/article/details/129883495)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [mybatis xml sql语句报错:大于号小于号的转义写法 Error creating document instance](https://blog.csdn.net/forthrlock/article/details/106812320)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值