mysql : name like “%name“; 索引一定失效吗?

这篇具有很好参考价值的文章主要介绍了mysql : name like “%name“; 索引一定失效吗?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

场景如下:

MySQL版本如下:
mysql : name like “%name“; 索引一定失效吗?

  • 表结构如下:mysql : name like “%name“; 索引一定失效吗?
  • 索引结构如下:

mysql : name like “%name“; 索引一定失效吗?

  • 查询语句以及执行计划如下:
  1. 第一条查询语句:

    select name from em where name like ‘%b’;

mysql : name like “%name“; 索引一定失效吗?
可以发现使用了name 字段创建的索引

  1. 第二条查询语句:

    select id from em where name like ‘%b’;

mysql : name like “%name“; 索引一定失效吗?

  1. 第三条查询语句:

    select * from em where name like ‘%b’;

    mysql : name like “%name“; 索引一定失效吗?

为什么会这样?

mysql 的执行流程如下:

  1. 语法分析和语义分析:MySQL查询优化器首先会对用户提交的查询语句进行语法分析和语义分析,以确保查询语句的正确性。

  2. 查询优化:MySQL查询优化器会根据查询语句中的表、索引、WHERE条件、GROUP BY、ORDER BY等信息,生成多个查询执行计划,并对每个执行计划进行成本估算,最终选择成本最小的执行计划。

  3. 查询执行:MySQL查询优化器根据选择的查询执行计划,执行查询语句,并生成查询结果。

还有一种场景当数据量小的时候其实也有可能走索引的

gpt 解释如下

当数据量比较小的时候,尽管使用LIKE语句中含有通配符,MySQL在查询时也可以通过对索引进行全表扫描来快速定位匹配的记录。由于数据量比较小,扫描整个索引树并读取索引节点的成本较低,相比于全表扫描的成本较小,因此索引扫描的性能可能优于全表扫描。此时,使用索引进行查询可能比不使用索引更快。

但是,当数据量增大到一定程度时,使用LIKE语句进行模糊匹配的效率会越来越低。因为这种模糊查询需要进行全表扫描,扫描整个表中的每一行记录,判断是否符合查询条件。此时,如果数据量太大,就需要扫描的数据量也会变得很大,而且由于索引树的高度也会增大,索引扫描的成本也会变得很高

总结 : mysql 会选择成本最小的执行计划,显然name字段只需要查询索引就能得到索引结果,而不需要全文查询。因此,索引是否能生效本质上还是要看mysql对各种执行计划成本的计算决定的。文章来源地址https://www.toymoban.com/news/detail-435578.html

到了这里,关于mysql : name like “%name“; 索引一定失效吗?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • like模糊查询导致索引失效的解决方案

    我们在使用like 通配符有下面三种用法,其中第1和第2的用法会引起索引失效的问题。这是因为MySQL的索引是按照从左到右的顺序进行匹配的,而前导通配符(比如%abc)会导致无法按照索引顺序进行匹配。 1、like \\\'%name\\\'   —— 失效 2、like \\\'%name%\\\'  —— 失效 3、like \\\'name%\\\' 现在来

    2024年02月11日
    浏览(42)
  • MySQL会导致索引失效的情况与解决索引失效的方法

    什么情况会导致索引失效 索引失效也是慢查询的主要原因之一,常见的导致索引失效的情况有下面这些: 1.使用 SELECT * 进行查询; 2.创建了组合索引,但查询条件未准守最左匹配原则; 3.在索引列上进行计算、函数、类型转换等操作; 4.以 % 开头的 LIKE 查询比如 like \\\'%abc\\\'; ; 5.查

    2023年04月08日
    浏览(62)
  • MySQL 索引失效详解

    一、MySQL索引失效原因汇总 隐式的类型转换,索引失效 查询条件包含or,可能导致索引失效 like通配符可能导致索引失效 查询条件不满足联合索引的最左匹配原则 在索引列上使用mysql的内置函数 对索引进行列运算(如,+、-、*、/) 索引字段上使用 (! = 或者 ),索引可能失效 索

    2024年02月02日
    浏览(44)
  • mysql 查询优化 、索引失效

    查询优化 物理查询优化 通过索引和表连接方式等技术来进行优化,这里重点需要掌握索引的使用 逻辑查询优化 通过SQL 等价变换 提升查询效率,直白一点就是说,换一种查询写法执行效率可能更高 索引失效 计算、函数、类型转换(自动或手动)导致索引失效 select sql_no_c

    2024年02月10日
    浏览(46)
  • Mysql中索引优化和失效

    要了解索引优化和索引失效的场景就要先了解什么是索引 索引是一种有序的存储结构,按照单个或者多个列的值进行排序,以提升搜索效率。 索引的类型 UNIQUE唯一索引 不可以出现相同的值,可以有NULL值。 INDEX普通索引 允许出现相同的索引内容。 PRIMARY KEY主键索引 不允许出

    2024年02月20日
    浏览(44)
  • 第20章:MySQL索引失效案例

    1. 全值匹配我最爱 当SQL查询 创建3个索引 当前优化器会选择跟where条件匹配最高的idx_age_classid_name索引,直接查询出对应的主键值然后回表查询,此时的效率最高。所以部分索引失效,因为使用的部分索引,会查询多个主键值还需要回表继续判断,效率低。 2. 最佳左前缀规则

    2024年02月11日
    浏览(39)
  • 详解MySQL索引失效的几种情况

    MySQL索引是提高查询效率的重要手段。索引失效会导致查询效率下降,甚至全表扫描,影响数据库性能。以下是可能导致MySQL索引失效的情况: 当where语句中使用 or 操作符并且 or 两边的条件涉及到至少两个字段时,MySQL无法使用索引,会转向全表扫描。因此,应尽量避免使用

    2024年02月01日
    浏览(44)
  • 面试官:讲讲MySql索引失效的几种情况

    拓展:Alibaba《Java开发手册》 【强制】页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决。 注意: 当数据库中的数据的索引列的 NULL值达到比较高的比例的时候 ,即使在IS NOT NULL 的情况下 MySQL的查询优化器会选择使用索引, 此时type的值是range(范围查询) 测试

    2024年02月11日
    浏览(36)
  • MySQL索引3——Explain关键字和索引优化(SQL提示、索引失效、索引使用规则)

    目录 Explain 索引性能分析 Id ——select的查询序列号 Select_type——select查询的类型 Table——表名称 Type——select的连接类型 Possible_key ——显示可能应用在这张表的索引 Key——实际用到的索引 Key_len——实际索引使用到的字节数 Ref    ——索引命中的列或常量 Rows——预

    2024年02月14日
    浏览(57)
  • Mysql进阶优化篇02——索引失效的10种情况及原理

    前 言 🍉 作者简介:半旧518,长跑型选手,立志坚持写10年博客,专注于java后端 🍌 专栏简介:mysql基础、进阶,主要讲解mysql数据库sql刷题、进阶知识,包括索引、数据库调优、分库分表等 🌰 文章简介:本文将介绍索引失效的10种情况及原理,绝对不需要死记硬背,建议收

    2024年02月02日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包