mysql的模糊查找是否走索引问题

在数据库中索引对于查找是非常有用的,楼主做了两个实验,插入数据的时候非常慢,楼主是这样实验的:

一:数据库列的索引

①:首先执行语句insert into test.user (select * from root.user where root.user.id>1 and root.user.id<10000),对于id,在没有建索引的情况下,楼主执行完sql之后等了大概有十秒还没有结束,趁这个时间楼主上了个厕所,回来的时候,惊呆了,sql居然还没有执行完成,又等了一会儿,实在等不下去了,就没有去理sql了;我没有等到sql结束,一分钟之后我终止了sql。

②:楼主对表字段name加了索引,效果十分显著,让楼主大吃一惊,加了索引之后时间是0.56秒(具体时间忘了),什么概念,没有索引的sql对比有索引的sql时间居然是后者的100倍级别了!

③:对于索引,数据库是怎么管理的。我们都知道数据在硬盘上存储是没有规律的,即便是两条相邻的数据,他的物理地址也不一定是相邻的。所以数据库为加了索引的列维护了一个二叉树,二叉树的每一个节点记录了对应的字段数据(id的值)和物理地址,当你在检索有索引的数据的时候,数据库会从二叉树上快速定位到你检索列的值,然后根据对应的值获取对应的地址,从而根据无力地址快速定位到数据。

二:模糊查找是否走索引

①:楼主用了这样一个sql,explain select * from table_name where name like '%李%',这个sql即便是你对name加了索引,他也不会走索引,而是走全表。

②:楼主换了一种sql,explain  select * from table_name where name like '李%',这种sql之后就走了索引。

③:之后楼主吧百分号换到了前面,explain select * from table_name where name like '%李',这种sql还是没有走索引

④:然后楼主又换:explain select * from table_name where id>0 and id <10000 and name like '李%',在mysql5.6版本,这条语句在id没有加索引的情况下还是走了索引,因为在5.6版本mysql做了优化,他先会走有索引的列,然后去筛选其他的条件,这样会大大减少检索时间。

⑤:explain select * from table_name where id>0 and id <10000 and name like '_李%',这条sql是不会走索引的,因为后面的模糊查找条件被下划线作为占位符占据了位置。mysql不会走索引

 

所以,对于mysql的索引问题:模糊查找,%在前面不走索引,在后面走索引,sql有索引的会先走索引,但是比较重要的一条是,模糊查找的百分号在后面的时候,要查找的数据被其他占位符占取的时候,sql是不会走索引的!

 

 

转载于:https://my.oschina.net/u/3689525/blog/1575324

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值