mysql内部组件架构,索引管理,视图view

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介:

mysql内部组件架构,索引管理,视图view

                                                                                                  ——以下内容摘自马哥教育课堂


===

单进程多线程模型

每个用户连接都使用一个线程

mysql使用线程池来管理各个线程


mysql内部组件架构

connection

--management service & unities(管理服务单元,如备份恢复,集群,合并,迁移工具,复制工具);

    connection pool(认证,线程重用,连接限制,内存检查,缓存);

--SQL接口(DML,DDL,存储过程,视图,触发器);

    分析器parser(查询翻译成二进制指令,访问权限);

    优化器optimizer(文件系统的访问路径,统计数据);

    缓存cache和缓冲buffer;

--存储引擎myisam,innodb,...

--文件系统,文件和日志(数据,索引,二进制日志,重做日志,撤销日志,错误日志,中继日志 )


mysql的某些存储引擎,可以把热点数据直接装入内存中,加速数据的访问,周期性同步到磁盘上(innodb可以实现)


mysql内部的工作流程(简化)

用户--[连接管理器--线程管理器]--用户模块--命令派发器--查询缓存(sql-value),记录日志;分析器--[优化器(sql语句),表修改模块,表维护模块,复制模块,状态报告模块]--访问控制模块--表管理器--存储引擎接口--myisam,innodb


mysql逻辑架构(简化版)

客户端--连接/线程处理--查询缓存,分析器--优化器--存储引擎--文件系统


===

索引管理

索引:按照特定数据结构存储的索引,特别适合某些算法快速执行。索引构建于内存中并排好序,可利用搜索算法快速定位某项或若干项,定位后,通过存储引擎到磁盘上加载索引项指向数据行到内存中即可。

没有索引就只能表扫描,把整张表数据从磁盘加载到内存中,再一行行比对操作,这显然费时费力。


索引构建原理

抽取表中某个字段做排序后单独存放为整字段索引中,然后,在此基础之上构建一个稀疏索引,比如分为四段索引A-H,I-M,O-T,U-Z分别映射到整字段索引中,如果要查找苹果,则会把O-T的字段加载到内存中查找即可。


B+树索引--多级稀疏格式索引来构建


索引类型:

聚集索引,非聚集索引:数据是否与索引存储在一起

主键索引,辅助索引:主键索引可实现一对一查询,辅助索引通常用于辅助其他查询操作

稠密索引,稀疏索引:索引是否索引了每个数据项

B+树索引,HASH索引(一对一查找),R树索引,全文索引:不同的索引数据结构

单键索引,组合索引:索引由一个字段还是多个字段来构建


mysql使用左前缀索引:LIKE 'ABC%'

弊端:LIKE '%abc00'就不能使用索引了


覆盖索引:例如在组合索引的场景中,在索引的基础上就找到需要查询的结果了,而无需再加载表数据的方式称作覆盖索引。


如何管理和使用索引

创建索引:创建表时指定,也可以单独创建

HELP CREATE TABLE

HELP CREATE INDEX;HELP DROP INDEX


索引没必要修改,只有创建/删除

在一张大表中不要随意创建/删除索引,非常耗费资源


操作演示

# mysql < hellodb.sql

> USE hellodb

> SHOW TABLES;

> SELECT  * FROM classes;

> HELP SHOW INDEX

> SHOW INDEXES FROM students;

结果显示在StuID上建立了索引

> SELECT * FROM students WHERE StuID=3;

> EXPLAIN SELECT * FROM students WHERE StuID=3\G

结果显示,使用了索引,只查询了1行即命中结果

> EXPLAIN SELECT * FROM students WHERE Age=9\G

结果显示,没有使用索引,需要查询25行

> HELP ALTER TABLE

> ALTER TABLE students ADD INDEX(Age);

此时修改表,添加索引创建在Age字段上

> SHOW INDEXES FROM students;

结果显示在StuID,Age上建立了索引

> EXPLAIN SELECT * FROM students WHERE Age=9\G

结果显示,使用索引,需要查询1行


> CREATE INDEX name ON students (Name);

> SHOW INDEXES FROM students;

此时,该表有3个索引,都是BTREE索引

> EXPLAIN SELECT * FROM students WHERE Name LIKE 'X%'\G

结果显示,过滤了6行,使用了索引

> EXPLAIN SELECT * FROM students WHERE Name LIKE '%X'\G

结果显示,没有使用索引,全表扫描


===

视图view

视图是虚表,是存储下来的SELECT语句

创建视图 HELP CREATE VIEW;

mysql的视图不完善?

雾化视图:把select语句的执行结果永久保存下来


> CREATE VIEW test AS SELECT StuID,Name,Age, FROM students;

> SHOW TABLES;

可以看到test表

> SHOW TABLES STATUS LIKE 'test'\G;

大部分提示NULL,comment提示VIEW

> SELECT * FROM test;

> SELECT * FROM test WHERE Age=22;

> EXPLAIN SELECT * FROM test WHERE Age=22;

同样可以使用索引Age


删除视图 HELP DROP VIEW;


视图能插入数据吗?

可以,往视图中插入数据,其实是插入到基表中,所以能否插入成功取决于基表对字段的约束。








本文转自 zhuhc1988 51CTO博客,原文链接:http://blog.51cto.com/changeflyhigh/1886365,如需转载请自行联系原作者
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
9月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
存储 SQL 关系型数据库
Mysql高可用架构方案
本文阐述了Mysql高可用架构方案,介绍了 主从模式,MHA模式,MMM模式,MGR模式 方案的实现方式,没有哪个方案是完美的,开发人员在选择何种方案应用到项目中也没有标准答案,合适的才是最好的。
1055 3
Mysql高可用架构方案
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
8月前
|
关系型数据库 MySQL 分布式数据库
Super MySQL|揭秘PolarDB全异步执行架构,高并发场景性能利器
阿里云瑶池旗下的云原生数据库PolarDB MySQL版设计了基于协程的全异步执行架构,实现鉴权、事务提交、锁等待等核心逻辑的异步化执行,这是业界首个真正意义上实现全异步执行架构的MySQL数据库产品,显著提升了PolarDB MySQL的高并发处理能力,其中通用写入性能提升超过70%,长尾延迟降低60%以上。
|
10月前
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
12月前
|
SQL 存储 缓存
MySQL的架构与SQL语句执行过程
MySQL架构分为Server层和存储引擎层,具有高度灵活性和可扩展性。Server层包括连接器、查询缓存(MySQL 8.0已移除)、分析器、优化器和执行器,负责处理SQL语句;存储引擎层负责数据的存储和读取,常见引擎有InnoDB、MyISAM和Memory。SQL执行过程涉及连接、解析、优化、执行和结果返回等步骤,本文详细讲解了一条SQL语句的完整执行过程。
435 3
|
SQL 存储 关系型数据库
MySQL进阶突击系列(05)突击MVCC核心原理 | 左右护法ReadView视图和undoLog版本链强强联合
2024年小结:感谢阿里云开发者社区每月的分享交流活动,支持持续学习和进步。过去五个月投稿29篇,其中17篇获高分认可。本文详细介绍了MySQL InnoDB存储引擎的MVCC机制,包括数据版本链、readView视图及解决脏读、不可重复读、幻读问题的demo演示。
|
SQL 存储 缓存
【赵渝强老师】MySQL的体系架构
本文介绍了MySQL的体系架构,包括Server层的7个主要组件(Connectors、Connection Pool、Management Service & Utilities、SQL Interface、Parser、Optimizer、Query Caches & Buffers)及其作用,以及存储引擎层的支持情况,重点介绍了InnoDB存储引擎。文中还提供了相关图片和视频讲解。
465 2
【赵渝强老师】MySQL的体系架构
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
|
NoSQL 关系型数据库 MySQL
2024Mysql And Redis基础与进阶操作系列(8)作者——LJS[含MySQL 创建、修改、跟新、重命名、删除视图等具体详步骤;注意点及常见报错问题所对应的解决方法]
MySQL 创建、修改、跟新、重命名、删除视图等具体详步骤;举例说明注意点及常见报错问题所对应的解决方法

热门文章

最新文章

推荐镜像

更多