1.MySQL架构

1.1逻辑架构图

1.1.1Connection Pool:连接池

*管理缓冲用户连接,线程处理等需要缓存的需求。

*负责监听对MySQL Server的各种请求,接收连接请求,转发所有连接请求到线程管理模块。每一个连接上MySQL Server的客户端请求都会被分配(或创建)一个连接线程为其单独服务。

*而连接线程的主要工作就是负责MySQL Server与客户端的通信,接受客户端的命令请求,传递Server端的结果信息等。线程管理模块则负责管理维护这些连接线程。包括线程的创建,线程的cache等。

1.1.2Parser:解析器

* SQL命令传递到解析器的时候会被解析器验证和解析。

主要功能:

a .将SQL语句进行语义和语法的分析,分解成数据结构,然后按照不同的操作类型进行分类,然后做出针对性的转发到后续步骤,以后SQL语句的传递和处理就是基于这个结构的。

b.如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的

1.1.3Optimizer:查询优化器

* SQL语句在查询之前会使用查询优化器对查询进行优化。

*它使用的是“选取-投影-联接”策略进行查询。

用一个例子就可以理解:select uid,name from user where gender = 1;

*这个select查询先根据where语句进行选取,而不是先将表全部查询出来以后再进行过滤

*这个select查询先根据uid和name进行属性投影,而不是将属性全部取出以后再进行过滤

*将这两个查询条件联接起来生成最终查询结果

1.1.4Cache和Buffer: 查询缓存

他的主要功能是将客户端提交给MySQL的select请求的返回结果集cache到内存中,与该query的一个hash值 做一个对应。该Query所取数据的基表发生任何数据的变化之后,MySQL会自动使该query的Cache失效。在读写比例非常高的应用系统中,Query Cache对性能的提高是非常显著的。当然它对内存的消耗也是非常大的。

如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等

1.1.5存储引擎接口

存储引擎接口模块可以说是MySQL数据库中最有特色的一点了。目前各种数据库产品中,基本上只有MySQL可以实现其底层数据存储引擎的插件式管理。这个模块实际上只是 一个抽象类,但正是因为它成功地将各种数据处理高度抽象化,才成就了今天MySQL可插拔存储引擎的特色。

注意:存储引擎是基于表的,而不是数据库。

1.2MySQL的存储引擎

*多存储引擎是mysql有别于其他数据库的一大特性;

*存储引擎是针对表的

* MySQL 5.5之后,默认的存储引擎由MyISAM变为InnoDB。

* MySQL引擎: 可以理解为,MySQL的“文件系统”,只不过功能更加强大。

* MySQL引擎功能: 除了可以提供基本的存取功能,还有更多功能事务功能、锁定、备份和恢复、优化以及特殊功能。

*查看存储引擎:show engines;

Innodb

Myisam

存储文件

.frm表定义文件

.ibd数据文件

.frm表定义文件

.myd数据文件.myi索引文件

表锁、行锁

表锁

事务

ACID

不支持

CRDU

读、写

读多

count

扫表

专门存储的地方

索引结构

B+ Tree

B+ Tree

1.3MySQL物理结构

1.3.1日志文件

MySQL通过日志记录了数据库操作信息和错误信息。常用的日志文件包括错误日志、二进制日志、查询日志、慢查询日志和InnoDB引擎在线Redo日志、中继日志等。

错误日志(error log):记录mysql服务器mysqld在启动/关闭或运行过程中遇到的错误信息。(默认是开启的,而且从5.5.7以后无法关闭错误日志)

查询日志(query log):

普通查询日志(general query log):记录客户端连接信息和执行的sql语句信息。(默认情况下通用查询日志是关闭的。)

慢查询日志(slow query log):记录执行时间超出指定值(long_query_time)的sql语句。(默认是关闭的。需要通过设置:slow_query_log=ON进行开启。)

二进制日志(binary log):记录数据被修改的相关信息。(默认是关闭的,需要通过配置:log-bin=mysql-bin进行开启)

在配置文件中进行配置各日志路径

1.3.2数据文件

查看MySQL数据文件:SHOW VARIABLES LIKE ‘%datadir%’;

l.frm文件:主要存放与表相关的数据信息,主要包括表结构的定义信息

l.ibd和.ibdata文件:用来存储InnoDB存储引擎的表数据和索引信息

l.myd文件:主要用来存储使用MyISAM存储引擎的表数据信息。

l.myi文件:主要用来存储使用MyISAM存储引擎的表数据文件中任何索引的数据树。

2.MySQL索引

一般情况下,在没有建立索引的时候,mysql需要扫描全表及扫描10W条数据找这条数据,如果我在nickname上建立索引,那么mysql只需要扫描一行数据及为我们找到这条nickname='css'的数据,是不是感觉性能提升了好多咧....

mysql的索引分为单列索引(主键索引,唯一索引,普通索引)和组合索引.

单列索引:一个索引只包含一个列,一个表可以有多个单列索引.

组合索引:一个组合索引包含两个或两个以上的列,

2.1索引的创建

2.1.1单列索引

1.普通索引,这个是最基本的索引

其sql格式是 :

CREATE INDEX IndexName ON `TableName`(`字段名`(length))

或者

ALTER TABLE TableName ADD INDEX IndexName(`字段名`(length))

2.唯一索引,与普通索引类似,但是不同的是唯一索引要求所有的类的值是唯一的,这一点和主键索引一样.但是他允许有空值,

其sql格式是:

CREATE UNIQUE INDEX IndexName ON `TableName`(`字段名`(length));

或者

ALTER TABLE TableName ADD UNIQUE (column_list)

3.主键索引,不允许有空值,(在B+TREE中的InnoDB引擎中,主键索引起到了至关重要的地位)

主键索引建立的规则是int优于varchar,一般在建表的时候创建,最好是与表的其他字段不相关的列或者是业务不相关的列.一般会设为int而且是AUTO_INCREMENT自增类型的

2.1.2组合索引

一个表中含有多个单列索引不代表是组合索引,通俗一点讲 组合索引是:包含多个字段但是只有索引名称

其sql格式是:

CREATE INDEX IndexName On `TableName`(`字段名`(length),`字段名`(length),...);

2.2索引的删除

删除索引的mysql格式:

DORP INDEX IndexName ON `TableName`;

mysql索引 物理文件_MySQL架构和MySQL索引相关推荐

  1. mysql索引 物理文件_MySQL体系结构之物理文件

    一.MySQL日志文件 mysql日志文件及功能: 日志文件 功能 错误日志 记录启动.停止.运行过程中mysqld时出现的问题 通用日志 记录建立客户端连接和执行的语句 二进制日志 记录更改数据的所 ...

  2. mysql索引 物理文件_MySQL索引详解

    1.前言 MySQL数据库管理系统本身就是一个文件管理系统,虽然它的实现方式确实比较复杂,但本质上是要通过访问磁盘才能完成数据的存储与检索.所以如果我们想要进一步了解MySQL索引的的话,磁盘相关的操 ...

  3. mysql的innodb表生成的物理文件_MySQL innodb表使用表空间物理文件复制或迁移表

    MySQL InnoDB引擎的表通过拷贝物理文件来进行单表或指定表的复制,可以想到多种方式,今天测试其中2种: 将innodb引擎的表修改为Myisam引擎,然后拷贝物理文件 直接拷贝innodb的表 ...

  4. mysql参数优化步骤_MySQL架构优化实战系列4:SQL优化步骤与常用管理命令2(转)

    MySQL架构优化实战系列4:SQL优化步骤与常用管理命令 原文:http://dbaplus.cn/news-11-649-1.html 一.SQL语句优化步骤 1.查看MySQL状态及配置 sho ...

  5. mysql导入dat文件_从零开始学习 MySQL 系列--索引、视图、导入和导出

    前言 上篇文章我们学习了数据库和数据表操作语句,今天我们学习下数据库索引,视图,导入和导出的知识. 作为基础篇,不会涉及到关于索引和视图的高级应用和核心概念,但是基本操作大家会了解,尤其是关于索引的内 ...

  6. mysql数据库存储引擎和索引的描述_Mysql InnoDB引擎的索引与存储结构详解

    前言 在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的. 而MySql数据库提供了多种存储引擎.用户可以根据不同的需求为数据表选择不同的存储引擎,用户也 ...

  7. mysql的学习要点_MySQL中的联合索引的学习要点总结

    MySQL中的联合索引的学习要点总结 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a ...

  8. mysql 查找相似数据_MySQL学习笔记之索引

    索引是存储引擎用于快速找到记录的一种数据结构. 索引对于良好的性能非常关键.尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要.在数据量较小且负载较低时,不恰当的索引对性能的影响可能还不明显,但 ...

  9. mysql 导入8msql文件_MySQL导入大容量SQL文件数据问题

    mysql在通过导入sql文件可能会出现下面二个问题: 1.如果sql文件过大,会出现"MySQL server has gone away"问题; - 2.如果sql文件数据有中 ...

最新文章

  1. 硕博就业:引进博士40万;硕士20万;本科15万
  2. 知乎 高级操作系统_知乎高赞:Linux!为何他一人就写出这么强的系统,中国却做不出来?...
  3. JavaScript之自定义对象
  4. {{view 视图层}}微信小程序
  5. 全国计算机等级考试题库二级C操作题100套(第12套)
  6. Rancher 2.5 正式发布,多项重大更新来袭!
  7. Openstack平台搭建之第二天
  8. 基于改进的CASA模型反演NPP
  9. dota2 自定义官方服务器,起源2引擎DOTA2重生设置 自定义房间创建
  10. 基于协同过滤算法的旅游推荐系统
  11. LFS8.0完全安装搭建制作教程
  12. 将macOS Big Sur降级到Catalina或Mojave的方法步骤
  13. 博弈中的神奇策略:A tit-for-tat strategy
  14. Pizza Cutter Gym - 101908C
  15. 每个人都应该遵循的12个 SEO 最佳实践
  16. android8.1 彩蛋,遥遥领先!OPPO R11s成为搭载安卓8.1的国内厂商,还有一个彩蛋!...
  17. springboot项目启动报错-案例情景介绍
  18. 笔记本卡顿不流畅是什么原因_笔记本卡顿不流畅是什么原因_笔记本电脑卡顿不流畅如何解决-win7之家...
  19. java圆的面积_JAVA求圆的面积
  20. 【国服封测体验】18日国服压轴大戏“天魔大战”全记录

热门文章

  1. 游戏使用html签名,关于玩游戏的个性签名
  2. keras、tf、numpy实现logloss对比
  3. 华为云设计语言_《好设计,有方法:我们在搜狐做产品体验设计》 —2.2 设计语言带来的好处...
  4. Java使用预定格式获取时间字符串
  5. mysql数据库5.7配置文件_MySQL 5.7配置文件参考
  6. Linux文件系统保存在哪里,文件系统保存在磁盘的()
  7. 求中位数_图解面试题:如何分析中位数?
  8. Android SQLite保存多个选择题的选择信息
  9. 【腾讯面试题】MySQL常用数据库引擎
  10. AIProCon在线大会笔记之Google李双峰:TensorFlow的最新进展