第20章:MySQL索引失效案例

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

1.全值匹配我最爱

当SQL查询

EXPLAIN SELECT SQL_NO_CACHE * FROM student WHERE age=30 AND classId=4 AND NAME='abcd';

创建3个索引

idx_age,idx_age_classid,idx_age_classid_name

当前优化器会选择跟where条件匹配最高的idx_age_classid_name索引,直接查询出对应的主键值然后回表查询,此时的效率最高。所以部分索引失效,因为使用的部分索引,会查询多个主键值还需要回表继续判断,效率低。

2.最佳左前缀规则

 当SQL查询

EXPLAIN SELECT SQL_NO_CACHE * FROM student WHERE age=30 AND NAME='abcd';

创建索引

idx_age_classid_name

此时只用到索引age,因为跳过了索引字段,后面部分classid_name没有使用。

结论:MySQL可以为多个字段创建联合索引,where条件要使用索引必须按照索引建立时的顺序,依次满足,一旦跳过某个字段,索引后面的字段无法使用。如果where条件没有使用第1个字段,索引将无法使用。

3.主键插入顺序

如果当前页的数据已经满了

第20章:MySQL索引失效案例

 此时插入主键值为9的记录

第20章:MySQL索引失效案例

会造成页分裂,把当前的页分裂成两个页。把本页的一些记录移动到新页,会造成性能损耗。所以主键值要依次递增。主键具有auto_increment,顺序写入,减少页分裂。

4.计算、函数、类型转换导致索引失效。

①函数索引失效

创建索引:idx_name

使用索引:SELECT * FROM student where name like 'abc%'

不使用索引:SELECT * FROM student where LEFT(name,3) ='abc'

②计算索引失效

创建索引:idx_sno

使用索引:SELECT * FROM student where stuno = 123;

不使用索引:SELECT * FROM student where stuno+1 = 123;

③类型转换索引失效

创建索引:idx_name

使用索引:SELECT * FROM student where name = 'abc'

不使用索引:SELECT * FROM student where name = 123

5.范围条件(大于小于)右边的列索引失效

创建索引:idx_age_classId_name

SQL语句: select * from student where age = 30 and classId>20 and name='abc'

只使用age_classId部分索引,name索引失效。

优化:创建联合索引,把范围条件的字段放在索引的最后,idx_age_name_classId

6.where条件不等于,大于,小于,索引失效

7.is null 可以使用索引(等于),is not null 不可以使用索引(不等于)

优化:在设计数据表将字段设置not null约束。

8.模糊查询%开头索引失效

优化:页面搜索严禁左模糊或全模糊,需要的话使用搜索引擎

9.or前后存在非索引的列,索引失效

or前后字段都要存在索引,才能使用

10.数据库和表的字符集统一使用utf8mb4,不同的字符集比较需转换会索引失效

【练习】index(a,b,c)

第20章:MySQL索引失效案例

 

【建议】

①单列索引,当前搜索过滤性更好的索引

②组合索引:过滤性好的索引靠前,包含where条件更多的字段,出现范围查询放到最后文章来源地址https://www.toymoban.com/news/detail-505851.html

到了这里,关于第20章:MySQL索引失效案例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • MySQL索引失效的七大场景

    模型数或运算快 这里我们以MySQL自带的world数据库中的country表为例。 向name列添加索引 查看country表索引 测试like完全匹配 可以看到type级别是index。索引失效。 在 MySQL 中,使用 EXPLAIN 语句可以查看查询语句的执行计划,了解 MySQL 如何执行查询。其中,EXPLAIN 语句的结果集中的

    2023年04月22日
    浏览(42)
  • Mysql中索引优化和失效

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

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

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

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

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

    2024年02月14日
    浏览(40)
  • mysql : name like “%name“; 索引一定失效吗?

    场景如下: MySQL版本如下: 表结构如下: 索引结构如下: 查询语句以及执行计划如下: 第一条查询语句: select name from em where name like ‘%b’; 可以发现使用了name 字段创建的索引 第二条查询语句: select id from em where name like ‘%b’; 第三条查询语句: select * from em where name l

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

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

    2024年02月11日
    浏览(30)
  • MySQL索引3——Explain关键字和索引使用规则(SQL提示、索引失效、最左前缀法则)

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

    2024年02月14日
    浏览(34)
  • 【MySQL】SQL索引失效的几种场景及优化

    MySQL中提高性能的一个最有效的方式是对数据表设计合理的索引。索引提供了高效访问数据的方法,并且加快查询的速度, 因此索引对查询的速度有着至关重要的影响。 使用索引可以快速地定位表中的某条记录,从而提高数据库查询的速度,提高数据库的性能。如果查询时没

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

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

    2024年02月02日
    浏览(29)
  • MySQL中IN的取值范围较大时会导致索引失效

    结论:IN肯定会走索引,但是当IN的取值范围较大时会导致 索引失效,走全表扫描 navicat可视化工具使用explain函数查看sql执行信息 1.1 场景1:当IN中的取值只有一个主键时 我们只需要注意一个最重要的type 的信息很明显的提现是否用到索引: type结果值从好到坏依次是: syste

    2024年02月15日
    浏览(25)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包