索引的SQL提示与覆盖索引

       📝个人主页:五敷有你      

 🔥系列专栏:面经

⛺️稳中求进,晒太阳

SQL提示

首先来看,tb_user的name字段有两个可能有效:

1. t_name_phone_age 

2. idx_name

如果查询name字段的东西,这两个索引都可能有效,那么究竟走那个索引呢?

如下图:在poeeible_keys中可能用到的索引有两个,但是实际是只用了一个,那为什么走了联合索引,不走单列索引呢?

这实际是mysql的优化器自动选择的结果。

那我想走另一个索引,能做到吗? 能!!!

使用SQL提示

SQL提示:

        是优化数据库的一个重要手段,简单来说,就是在SQL语句中加入一些人为的提示来达到优化操作的目的。(是人提示SQL,不是SQL提示人,不要理解错了

语法:

use index(索引名)   

explain select * from tb_user use index(idx_name) where name ='吕布'

注意:

use 是只是给一个建议,可能mysql不接受

ignore index(索引名)

explain select * from tb_user ignore index(idx_name) where name ='吕布'

注意:

ignore是忽略这个索引。

force index(索引名)

explain select * from tb_user force index(idx_name) where name ='吕布'

注意:

force是强迫你使用这个索引

覆盖索引

        尽量使用覆盖索引(查询是使用了索引,并且需要返回的列在该索引中已经全部能找到),减少使用select *。

执行这四条语句

explain select * from tb_user where name ='吕布' and phone='17799990000' and age = 23;

explain select name,phone,age from tb_user where name ='吕布' and phone='17799990000' and age = 23;

explain select id,name,phone,age from tb_user where name ='吕布' and phone='17799990000' and age = 23;

explain select id,name,phone,age,gender from tb_user where name ='吕布' and phone='17799990000' and age = 23;

从上到下,运行结果如下图所示:

观察发现他们的执行计划好像没有什么区别,但是要注意看Extra的字段信息。

有的是null 有的是use index.

use index 代表 查找使用了索引,但是需要的数据都在索引列中能找到,所以不需要回表查询数据

null         代表 查询使用了索引,但是需要回表查询数据

注意:不用记忆这写信息,因为不同的mysql版本 Extra的内容代表的意思也不一样。

那为什么查询name phone age id就不需要回表呢?

因为在联合索引的可以找到全部需要的数据(非叶子节点有name,phone age, 叶子节点有id),所以不需要回表。但是在第四个字段 gender 是在二级索引找不到的,所以需要回表查询一下

为了更清楚的理解,我找了一些HM的图:

有了一定了理解:我出个题思考一下大家:

一张表有id name age phone  gender 字段,由于数据量巨大,需要对以下SQL语句进行优化,如何进行才是最有方案:

select id,name,phone,gender  from tb_user where username = '白起'

答案是:

针对name phone age gender 进行创建联合索引,

sql为: create index idx_user_name_age_pho_gender on tb_user(name,phone,age,gender);

相关推荐

  1. 【MySQL】覆盖索引

    2024-05-10 11:50:07       19 阅读
  2. SQL Server索引选择

    2024-05-10 11:50:07       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-10 11:50:07       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-10 11:50:07       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-10 11:50:07       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-10 11:50:07       18 阅读

热门阅读

  1. RUST编程语言入门基础2024

    2024-05-10 11:50:07       13 阅读
  2. 算法题:动态规划

    2024-05-10 11:50:07       12 阅读
  3. webpack4和webpack5区别4---自动清除打包目录

    2024-05-10 11:50:07       9 阅读
  4. .net 生成二维码图片

    2024-05-10 11:50:07       8 阅读
  5. 对话机器人技术解说

    2024-05-10 11:50:07       10 阅读
  6. 金融名词剖析:77个“支付近义词”辨析

    2024-05-10 11:50:07       12 阅读
  7. Spring MVC(二)

    2024-05-10 11:50:07       10 阅读
  8. GPT问答SAP BW

    2024-05-10 11:50:07       12 阅读
  9. windows环境下cgo使用opencv和遇到的疑难问题解决

    2024-05-10 11:50:07       13 阅读