sql何时会触发索引失效

news/2024/11/8 4:35:40/

 

前置sql知识

Q:我们怎么知道 sql 有没有使用索引呢
A:要确定 MySQL 是否使用了索引来处理查询,可以使用 EXPLAIN SELECT 语句来检查查询的执行计划。执行 EXPLAIN SELECT 语句后,MySQL 将返回一个描述查询执行计划的结果集,其中包括了 MySQL 在查询过程中所使用的索引信息。

在查询执行计划的结果集中,可以查看 key 列和 Extra 列来确定 MySQL 是否使用了索引:

- 如果 key 列显示了一个索引名,则表示 MySQL 使用了该索引来处理查询;
- 如果 key 列显示 NULL,则表示 MySQL 没有使用索引来处理查询。

需要注意的是,如果 MySQL 在查询过程中使用了多个索引,则 key 列可能会显示多个索引名,这时需要优化查询语句和索引来提高查询性能。

除了 key 列之外,还可以查看 Extra 列来获取关于索引使用情况的更多信息。例如,如果 Extra 列显示了 "Using index",则表示 MySQL 使用了覆盖索引来处理查询,这可以减少查询的磁盘访问次数,提高查询性能。

EXPLAIN使用方法举例

explain (select * from user where id = 1 or name = 'gcy');+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra       |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
|  1 | SIMPLE      | user  | NULL       | ALL  | PRIMARY       | NULL | NULL    | NULL |    4 |    43.75 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+

Q:在 sql 中使用explain语句查询出来的表中,type列的值分别代表什么含义?
A:在使用EXPLAIN语句查询SQL查询语句的执行计划时,type列的值表示MySQL在执行查询时所使用的访问类型,即MySQL使用哪种方式来查找所需的行。

下面是type列可能的值及其含义:

- system:表示只有一行的表(即系统表),这是const类型的特例。
- const:表示通过索引一次就找到了,const用于比较主键或唯一索引。因为只匹配一行数据,所以很快。例如,查询`SELECT * FROM table_name WHERE primary_key=1`,如果primary_key是一条主键或唯一索引,那么type将是const。
- eq_ref:表示使用唯一索引或主键查找时,对于每个索引键,表中只有一行匹配。这是一个联接类型,通常出现在使用主键或唯一索引查找行时。例如,查询`SELECT * FROM table_name JOIN other_table ON table_name.primary_key=other_table.foreign_key`,如果primary_key是一个主键或唯一索引,而foreign_key是一个对应的键,那么type将是eq_ref。
- ref:表示使用普通索引查找时,所需的行数较少。例如,查询`SELECT * FROM table_name WHERE indexed_column=10`,如果indexed_column是一个普通索引,那么type将是ref。
- range:表示使用索引查找时,返回一个范围的行。例如,查询`SELECT * FROM table_name WHERE indexed_column BETWEEN 10 AND 20`,如果indexed_column是一个普通索引,那么type将是range。
- index:表示全表扫描,这是查询效率最低的一种情况。例如,查询`SELECT * FROM table_name WHERE indexed_column LIKE '%abc%'`,如果indexed_column没有索引,那么type将是index。
- all:表示全表扫描,与index区别在于,它遍历了全表而不是使用索引。这是查询效率最低的一种情况。例如,查询`SELECT * FROM table_name`,如果table_name没有索引,那么type将是all。

Q:在 sql 中使用explain语句查询出来的表中,key列的值分别代表什么含义

A:在使用EXPLAIN语句查询SQL查询语句的执行计划时,key列的值表示MySQL在查询过程中所使用的索引,即MySQL使用哪个索引来处理查询。

下面是key列可能的值及其含义:

- NULL:表示MySQL没有使用索引来处理查询,这通常发生在没有可用索引或优化器认为全表扫描的代价更小的情况下。
- PRIMARY:表示MySQL使用了表的主键索引来处理查询。
- 普通索引名称:表示MySQL使用了该名称的普通索引来处理查询。

请注意,如果MySQL在处理查询时使用多个索引,则key列可能会显示多个索引名称,这时需要对多个索引的使用顺序进行优化(例如,使用覆盖索引或联合索引)以提高查询性能。

另外,需要注意的是,即使key列的值为NULL,也不一定意味着查询的性能会很差。实际上,有时候全表扫描可能比使用索引更快,特别是当查询的数据量很小或者索引的选择性很低时。


http://www.ppmy.cn/news/242849.html

相关文章

每日一练 | 华为认证真题练习Day53

1、现在有以下10.24.0.0/24,10.24.1.0/24,10.24.2.0/24,10.24.3.0/24四个网段,这四个网段可以汇总为以下哪个网段?(多选) A. 10.24.0.0/23 B. 10.24.1.0/23 C. 10.24.0.0/22 D. 10.24.0.0/2…

AI换脸(支持视频换脸,支持cpu、低算力)【附代码】

可直接选择一张人脸去替换另一张图片或者视频中的人脸。本项目仅提供人脸替换部分,不需要数据集,不用训练! 目录 项目说明 环境说明 准备工作 如何使用 免责声明 项目说明 本项目参考源码:GitHub - s0md3v/roop: one-click…

电阻触摸屏原理

电阻触摸屏结构 上图是电阻触摸屏的一个侧面剖视图。手指触摸的表面是一个硬涂层,用以保护下面的PET层。PET层是很薄的有弹性的PET薄膜,当表面被触摸时它会向下弯曲,并使得下面的两层ITO涂层能够相互接触并在该点连通电路。两个ITO层之间是约…

触摸屏中应用的电容式触摸芯片

触控屏(Touch panel)又称为触控面板,是个可接收触头等输入讯号的感应式液晶显示装置,当接触了屏幕上的图形按钮时,屏幕上的触觉反馈系统可根据预先编程的程式驱动各种连结装置,可用以取代机械式的按钮面板&…

四线触摸屏原理

四线触摸屏原理 人机对话的界面种类有很多,比如显示器、LED、LCD及带触摸屏的LCD等。其中后者是最近几年刚发展起来的一项新技术,它通过计算机技术处理声音、图像、视频、文字、动画等信息,并在这些信息间建立一定的逻辑关系,使之…

触摸屏原理

(转自:https://www.cnblogs.com/deng-tao/p/6122142.html) 一、输入类设备简介 1、IO输入输出,是计算机系统中的一个概念。计算机的主要功能就是从外部获取数据然后进行计算加工得到输出数据并输出给外部(计算机可以…

XPT2046电阻触摸屏芯片的使用

介绍 XPT2046是一颗12位的ADC芯片,可以当做普通的ADC芯片使用,但是一般都是用在电阻触摸屏上,方便定位触摸屏坐标。 特性 工作电压范围为 2.2V~5.25V支持 1.5V~5.25V 的数字 I/O 口内建 2.5V 参考电压源电源电压测…

四线电阻触摸屏原理

转载自:http://www.elecfans.com/kongzhijishu/renjijiemian/596589.html 一、结构 上图是电阻触摸屏的一个侧面剖视图。手指触摸的表面是一个硬涂层,用以保护下面的PET层。PET层是很薄的有弹性的PET薄膜,当表面被触摸时它会向下弯曲&#xf…