news 2026/10/16 12:17:25

MySql进阶-SQl优化,视图

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySql进阶-SQl优化,视图

SQL优化

一.插入优化

二.主键优化

(1)页分裂

此时为主键乱序插入,50应该放在47后面,但如果47所在的页已经放不下50这个数据了,这时候mysql会创建一个新页并找到47所在页的50%的位置,把50%后的数据放在新页中,再在后面插入新数据,最后调整链表指针,保持顺序,这种现象叫做页分裂。

(2)页合并

此时 2#page 中删除记录达到了阈值,会判断相邻两页是否可以合并,合并完如下

(3)主键设计原则

1.满足业务需求的情况下,尽量降低主键的长度

因为聚簇索引一张表只有一个,但二级索引可以有很多个,二级索引的叶子节点存放的是主键,主键过长会占过多磁盘空间,而且搜索的时候会浪费磁盘 I/O

2.插入数据时,尽量选择顺序插入,选择使用自增主键

顺序插入时,一个页写不下了就写下一个页就行了,乱序插入时会有页分裂现象

3.尽量不要使用 UUID 做主键或使用其他自然主键,如身份证号。

因为这些数据没有顺序,就会乱序插入,而且长度通常较长

4.业务操作时,避免对主键的修改

三.order by 优化

创建索引前:使用的是 filesort

此时给age,phone创建联合索引

创建索引后:使用的是Using index 直接通过索引返回了有序数据

根据age和phone倒序排:

也没有使用filesort ,Backward index scan:反向扫描索引

之前都是先根据age排,再根据phone排序,如果先根据phone,再根据age排会怎么样呢?

此时也用到了 filesort 因为我们创建索引时,第一个字段是age ,先按phone排序,违背了最左前缀法则

要是按 age asc ,phone desc排序呢?

还是用到了filesort,以为创建索引时,是按age asc 再 phone asc 创建的,此时按phone 倒序排 ,就需要额外的排列

按age asc ,phone desc创建一个新的索引,会怎么样呢?

查询索引,发现该索引的Collection 是D 其他的都是A 可知此处D代表降序的意思

再次查询 此时走的索引是刚才创建的索引 这次没有使用filesort

按两种不同的方法排序所创建的索引的区别如下:

注意事项:

四.group by优化

删掉索引后 查询profession结果如下

创建联合索引后,查询profession结果如下

查询age 结果如下

查询profession和age结果如下

先用profession过滤 结果如下

注意事项:

五.limit优化

六.count优化

七.update 优化

视图

一.介绍及基本语法:

介绍:

创建:

根据student的id和name字段创建视图stu_v_1,创建好了左侧会有显示

查询:

修改:

很明显根据左侧的数据就能看出来 修改成功

使用第二种方法也修改成功

删除:

二.检查选项(cascaded)

视图既然是一个虚拟的表,自然可以增删改查,但是视图实际上并不存储数据,那么如果增加一条数据,数据去哪了?

再次根据student表重新创建视图,并且成功插入一条数据

结果数据插入到了student表里

再次插入一条id为30的数据

student表里也成功插入了这条数据,但是再次对视图进行查询发现id为30的数据没有查出来

这是因为我们创建这个视图时,规定了where id<= 20,我们插入的数据,有的却查不到,那要怎么办呢?

可以在后面加上with cascaded check option

加上这个语句,重新创建视图,插入数据

可以发现插入id为30的数据时,报错了,避免了之前的情况,于是引出了检查选项这个概念

视图除了基于表创建,也可以基于另一个视图创建

创建第一个视图时不加 with check option,增删改查时不会检查where条件

但要是第二个视图基于第一个视图创建时加上了with check option ,给视图v2增删改查时 不仅会检查v2的条件,也会检查v1的条件

例子:

v2插入7,报错,因为不满足v2的id>=10

插入26,报错,因为不满足v1的id<=20

插入15,成功

如果又有视图v3基于v2创建,且不加with check option 会怎末样呢?

执行过程:
插入11 满足id<=15 成功

插入17 因为v3没加检查选项 不会对v3本身的条件进行检查 但是会接着检查v2的条件 (因为v2加了with check option), 满足,接着检查v1的条件(因为v2基于v1创建,且加了检查选项),满足,成功

插入 28 ,检查v2的条件,满足,检查v1的条件,不满足,失败

三.检查选项(local)

给v2加上with local check option,对v2增删改查时,同样会看他所依赖的视图有没有加检查选项,但是如果他所依赖的视图 不加检查选项的话 就不会像cascaded那样检查了所有它的依赖视图的条件了

四.视图的更新及视图的作用

五.案例

比如案例二,根据三表联查创建视图,后面直接查视图就能简化操作

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/16 12:12:04

FLAC转MP3全指南:编码参数、批处理与避坑实战

简介&#xff1a;FLAC转MP3大师 v7.0 是一套面向音频处理与多媒体格式转换场景的实用工具&#xff0c;主要帮助用户将 FLAC 无损音频转换为高品质 MP3 音乐&#xff0c;同时兼容 WMV、MP4、MOV、MPG、WAV、WMA 等常见音视频格式转 MP3 的需求&#xff0c;适合日常整理无损音乐、…

作者头像 李华
网站建设 2026/10/16 12:12:03

Cassandra Compaction策略选型:STCS、LCS与TWCS实战解析

打开你的Cassandra集群的 nodetool tablestatus &#xff0c;看到某张表SSTable数量冲到几十甚至上百&#xff0c;后台compaction永远跟不上写入&#xff0c;查询慢得像在拖泥巴——这类问题十有八九不是硬件不行&#xff0c;而是当初建表时随手选错了compaction策略。 Cass…

作者头像 李华
网站建设 2026/10/16 12:03:03

GPU容器化与AI训练平台实践:从Kubernetes调度到资源治理

1. 从裸机乱局到容器化&#xff1a;我们为什么非要重建一套训练平台 我所在的团队负责为整个公司的算法部门提供 GPU 算力支撑。两年前的状态&#xff0c;说实话&#xff0c;和很多公司一样&#xff1a;几台 8 卡的 GPU 服务器散落在不同机柜&#xff0c;算法同学申请到一台机器…

作者头像 李华
网站建设 2026/10/16 12:02:03

正整数划分经典解法:从动态规划到完全背包的笔试题实战

写笔试题有个很有意思的现象&#xff1a;越是看起来简单的数学题&#xff0c;越容易把人卡在笔试现场。正整数划分就是典型代表。题目往往只有一句话&#xff1a;“把一个正整数拆成若干个正整数之和&#xff0c;求方案数。”看完题目觉得不难&#xff0c;真到动手写状态转移方…

作者头像 李华
网站建设 2026/10/16 12:01:42

BiLSTM-CRF与BERT融合:序列标注面试核心原理拆解

1. 从原理到面试题&#xff0c;一次把双向序列模型的“底裤”拆干净今年校招和社招的算法岗面试&#xff0c;NLP方向绕不开的一个「全家桶」就是标题里这四个概念&#xff1a;BiRNN、BiLSTM、BiLSTM-CRF 以及 BERT-BiLSTM-CRF。每次面到序列标注、命名实体识别、分词或关系抽取…

作者头像 李华