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"这个术语具体含义取决于上下文,可能是关于存储引擎数据页面的物理存储单位,也可能是查询执行计划中的结果集页面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值