MySQL高级面试点

Explain语句结果中各个字段分别代表什么

id:查询语句没出现一个select关键字,MySQL就会给他分配一个唯一id

select_type: select关键字对应哪个查询的类型

simple:简单的查询 不包含任何子查询

primary:查询中如果包含复杂的子部分,最外层查询被标记为Primary

oerived:在from列表中包含的子查询被标记为derived,MySQL会递归执行这些子查询,把结果放在临时表里

table:表名

type:查询方式(是用索引还是全表)

possible_keys:可能用到的索引

key:实际用到的索引

key_len:实际使用到的索引长度

ref:显示索引的哪一列被使用了

rows:预估需要遍历的条数

extra:额外信息,比如排序等

—些常见的重要的额外信息: Using filesort,: MySQL无法利用索引完成的排序操作称为“文件排序”。 排序的时候没有使用索引 Using temporary: Mysql在对查询结果排序时使用临时表,常见于排序order by和分组查询group by。 一般他出现会伴随着using filesort的出现,因为分组中包含了排序的过程 using temporary其实就是分组的时候没有使用索引,同时也会触发排序时没有使用索引 这两个一般考虑优化 using index:表示索引被用来执行索引键值的查找,避免访问了表的数据行,效率不错。 直接从索引(索引中包含这个字段)中获取了数据 不用在查询表 Using where:表示使用了where过滤。

索引覆盖:索引覆盖其实就是你要查询的所有字段在索引中都包含,所以可以直接从索引中获取数据,

而不用再去数据库中查询。

索引失效:

1、需要满足最佳左前缀法则

如果索引了多列,要遵循最左前缀法则,指的是查询从索引的最左前列开始并且不跳过索引中的列。(要想使用索引最左侧的必须含有,右侧的可以没有)

2、满足不在索引列上做任何计算、函数操作,这些操作会导致索引失效而转向全表扫描

3、存储引擎不能使用索引中范围条件右边的列

就比如

如果给id age name设置了一个联合索引

select * from user where id =1 and age = 12 and name ="zhangsan"

这个时候三个条件都会使用索引查询

如果

select * from user where id = 1 and age>12 and name ="zhangsan"

这个时候他索引之后查询到 age>12就会停止因为 不能使用范围条件右边的列

4、MySQL在使用不等于是无法使用索引会导致全表扫描

select * from user where id!=1

5、 is null可以使用索引,但是is not null 无法使用索引

select * from user where name is not null

6、like以通配符开头会使索引失效导致全表扫描

select * from user where name like "%明"

7、字符串不加单引号 索引会失效

 select * from user where name = zhangsan

8、使用or连接时索引失效

select * from user where id =1 or age = 12

排序优化:

1、尽量避免使用using fileSort 无索引排序

2、order by 语句使用索引最左前列或者使用where 子句与order by子句条件组合满足索引最左前列

3、where子句中如果出现索引范围查询 会导致order by索引失效

关联查询优化:

在MySQL中,“page”(页面)通常指的是存储引擎的数据页面或者查询执行计划中的一页结果集。

  1. 数据页面:存储引擎(如InnoDB)会将数据存储在物理上的数据页面中。这些页面是存储引擎用来管理和访问数据的基本单位。每个页面通常有固定的大小(例如16KB),并且存储引擎使用这些页面来存储和检索数据。

  2. 查询执行计划中的页面:当执行一个查询时,MySQL查询优化器会生成一个执行计划,描述如何检索和处理数据。这个执行计划可能包含多个步骤,每个步骤生成的结果集称为一个页面。这些页面描述了查询执行过程中的中间结果或最终结果的一页。

总之,在MySQL中,"page"这个术语具体含义取决于上下文,可能是关于存储引擎数据页面的物理存储单位,也可能是查询执行计划中的结果集页面。

相关推荐

  1. 分布式高级知识

    2024-07-15 06:48:02       48 阅读
  2. Golang 高级面试

    2024-07-15 06:48:02       27 阅读
  3. MySQL面试

    2024-07-15 06:48:02       54 阅读
  4. mysql面试

    2024-07-15 06:48:02       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 06:48:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 06:48:02       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 06:48:02       58 阅读
  4. Python语言-面向对象

    2024-07-15 06:48:02       69 阅读

热门阅读

  1. IOSUI自动化之mobiledevice

    2024-07-15 06:48:02       22 阅读
  2. Flask `before_request` 方法解析

    2024-07-15 06:48:02       26 阅读
  3. Hive常用内置函数合集

    2024-07-15 06:48:02       20 阅读
  4. ArrayList和LinkedList的区别

    2024-07-15 06:48:02       23 阅读
  5. 【python】数据类型和运算符

    2024-07-15 06:48:02       20 阅读
  6. 前端系列-5 SCSS使用介绍

    2024-07-15 06:48:02       24 阅读
  7. Flutter笔记--WebSocket

    2024-07-15 06:48:02       22 阅读
  8. MongoDB Shard 集群 Docker 部署

    2024-07-15 06:48:02       25 阅读
  9. 数据结构第27节 优先队列

    2024-07-15 06:48:02       21 阅读
  10. 速盾:cdn技术是什么意思?

    2024-07-15 06:48:02       22 阅读
  11. 使用adb连接安卓手机

    2024-07-15 06:48:02       22 阅读
  12. Android人脸解锁源码解析

    2024-07-15 06:48:02       16 阅读
  13. 速盾:高防cdn和普通cdn的区别?

    2024-07-15 06:48:02       29 阅读