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;

视图能插入数据吗?

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

时间: 2024-08-06 02:44:35

mysql内部组件架构,索引管理,视图view的相关文章

MySQL数据库以及表的管理

MySQL数据库以及表的管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 今天我们探讨的话题就是如何使用MySQL做开发,我们运维的主要工作不是去开发SQL的,但尽管如此,我们有可能需要对别人写出来的复杂SQL语句做性能评估,去分析他们写的SQL语句是不是足够高效,如果不是的话,我们还要能够达到对对方的SQL语句做改写的能力.所以,我们无需自行去开发SQL,但是我们一定要有一个看懂别人写的SQL的能力哟! 一.DBA的职责 1.开发DBA: 负责数据库设计(E-R关系图).

mysql数据库索引和视图,触发器

索引简介  跟存储引擎有很大关系其实就是一种排序,生成一种算法,索引主要用在大数据量的时候使用,数据小根本没必要 索引在mysql中也叫做键,是存储引擎用于快速找到记录的一种数据结构,索引对于良好的性能非常关键,尤其是当表中的数据量越来越大的时候,索引对于性能的影响越发重要. 索引优化应该是最查询性能优化的最有效的手段了,索引能够轻易将查询性能提高好几个数量级. 索引相当于字典的音序表,如果要查某个字,如果不使用音序表,则要从几百页中逐页去查. 索引优缺点 优点 加快访问速度 加强行的唯一性 缺

mysql基础(九) 索引和视图

索引:是一种按照特定存储格式存储的特殊数据,用于SQL查询 索引的类型:     聚集索引和非聚集索引:数据是否和索引存储在一起   主键索引和辅助索引:索引是否在主键之上   左前缀索引和覆盖索引:是否只截取左边的前几个字节最为索引,mysql默认使用左前缀索引 左前缀索引的存储:   在指定索引的字段中截取左边的前几个字节生成索引,并对索引进行排序处理,将排完序的索引进行分组管理   并生成源数据,当用户以索引字段作为查询条件时,mysql去扫描元数据,并定位到元数据对应数据的上 索引管理:

详解Mysql事务、索引、视图

索引简介 索引是为了加速对表中数据行的检索而创建的一种分散的存储结构.索引是针对表而建立的,它是由数据页面以外的索引页面组成的,每个索引页面中的行都会含有逻辑指针,以便加速检索物理数据. 索引作用 1.设置了合适的索引之后,数据库利用各种快速的定位技术,能够大大加快查询速率2.特别是当表很大时,或者查询设计到多表时,使用索引可使查询加快千倍3.可以降低数据库的IO(输入输出)成本,并且索引还可以降低数据库的排序成本,注意读的时候会消耗内存4.通过创建唯一性索引保证数据表数据的唯一性5.可以加快表

三十八、事务、mysql索引,视图

视图 视图就是通过得到一张虚拟表,然后保存下来,下次直接使用即可 视图应用:当反复用到两张表的连接操作时,可以保存下来,下次使用 如何使用: create view teacher2course as select * from teacher inner join course on teacher.id =course.teacher_id; 注意:不要修改视图里面的数据 删 drop view teacher2course; 触发器 当对某张“表”进行增insert,删delete,改up

MySQL视图view/存储过程和函数的使用

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px ".PingFang SC Semibold"; color: #454545 } p.p3 { margin: 0.0px 0.0px 2.0px 0.0px; font: 14.0px

SQL Server 索引(index) 和 视图(view) 的简单介绍和操作

--索引(index)和视图(view)-- --索引(index)----概述: 数据库中的索引类似于书籍的目录,他以指针形式包含了表中一列或几列组合的新顺序,实现表中数据库的逻辑排序.索引创建在数据表或者视图的字段上,生成索引页,存放于数据库中.--分类:在SQL Server中,根据索引的作用和存储方式的不同,将索引分为聚集索引和非聚集索引两类. 1)聚集索引 :指数据库的物理顺序与被创建索引的字段顺序完全相同.同一个数据表最多只能创建一个聚集索引.默认情况下主键自动被创建为聚集索引.聚集

Greenplum+Hadoop学习笔记-14-定义数据库对象之创建与管理序列、索引以及视图

6.5.创建与管理序列 序列常用于在新增记录时自动生成唯一标识符,序列的管理包括创建序列.使用序列.修改序列以及删除序列. 6.5.1.创建序列 使用CREATESEQUENCE命令来创建并初始化一个给定名称的单列序列表: devdw=# \h CREATE SEQUENCE                        查看创建序列的帮助 Command:     CREATE SEQUENCE Description: define a new sequence generator Synt

MySQL学习笔记——索引和视图

索引(index)和管理索引 模式中的一个数据库对象 作用:在数据库中用来加速对表的查询 创建:自动在主键和唯一键上面创建索引 通过使用快速路径访问方法快速定位数据,减少了磁盘的I/O 与表独立存放,但不能独立存在,必须属于某个表 由数据库自动维护,表被删除时,该表上的索引自动被删除 索引的作用类似于书上的目录,几乎没有一本书没有目录,因此几乎没有一张表没有索引 索引:在经常查询的字段上面建立索引,利用index对查询进行优化,(index可以避免对表的一个全面扫描) 原理:当以某个字段建立一个