Q&A(MySQL实战45讲)

本文探讨了SQL查询的执行过程,包括权限验证、查询缓存和优化器的交互,以及索引重建策略。通过具体案例分析,讨论了如何合理地修改复合主键和优化查询性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

01 | 基础架构: 一条SQL查询语句是如何执行的

MySQL的逻辑架构图
有两个问题

  1. 权限验证的问题
    命中查询缓存是返回结构的时候,做权限验证。但是又提出查询也会在优化器之前调用 precheck 验证权限??
  2. 分析器为什么有指向查询缓存的箭头?

05 | 深入浅出索引(上)

下面重建索引的做法,是否合适

alter table T drop primary key;
alter table T add primary key(id);

老师的参考答案:
重建主键的过程不合理, 不论是删除主键还是创建主键,都会将整个表重建,所以连着执行这两个语句,第一个语句白做了。这两个语句,可以用这个语句代替 alter table T engine=InnoDB

我的问题:
对于primary key 重建,使用alter table T engine=InnoDB来解决,如果是修改primary key呢?
项目情况: 历史原因,没有创建自增ID autoincrement主键,使用的是primary key(fieldA, fieldB, fieldC), 因为业务需求,需要修改primary key (fieldA, fieldB, fieldD),有什么好的方法吗?

注:之前的操作是新建一张表,然后替换之前的表,很是麻烦

05 | 深入浅出索引(下)

CREATE TABLE `geek` (
  `a` int(11) NOT NULL,
  `b` int(11) NOT NULL,
  `c` int(11) NOT NULL,
  `d` int(11) NOT NULL,
  PRIMARY KEY (`a`,`b`),
  KEY `c` (`c`),
  KEY `ca` (`c`,`a`),
  KEY `cb` (`c`,`b`)
) ENGINE=InnoDB;

select * from geek where c=N order by a limit 1;
select * from geek where c=N order by b limit 1;

关于索引创建的问题,结论是ca可以去掉,cb保留。
但是做了一个测试, 结果表明cb索引没有用上
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值