Mysql的体系结构

 

Mysql由以下几部分组成:

连接池组件
管理服务和工具组件
SQL接口组件
查询分析器组件
优化器组件
缓冲组件
插件式引擎
物理文件

注意:存储引擎是基于表的,不是基于库的!

 

Mysql的表存储引擎

 存储引擎绝对是Mysql的核心,由于存储引擎是基于表级别的,可以在一个程序中采用多种存储引擎。

 

InnoDB存储引擎

特点:

支持事务

行级别的锁

外键

不支持全文索引

 

非锁定读,默认读操作不会产生锁

表存储在.ibd文件中,数据存储方式:聚集

 

功能:

插入缓存

二次写

自适应哈希索引

预读

 

表的存储按照主键顺序存放,如果没有指定主键,引擎会自动为每行生成一个6字节的ROWID,以此为主键。

 

MyISAM存储引擎

官方推荐的引擎,不支持事务,不支持表锁,支持全文索引。

引擎由MYD和MYI组成,MYD用来存储数据,MYI用来存储索引。

可以使用myisampack工具对数据文件进一步压缩,但是压缩后只能读取不能写入。

对于此引擎,Mysql数据库只负责索引的缓存,数据的缓存有操作系统来完成。

现在采用的Mysql版本(5.0之后)支持最大256T的表数据。

 

NDB存储引擎

这是一个集群存储引擎,性能比Oracle的RAC好。

数据存储在内存中,非索引数据也能存储在磁盘中。

连接操作在数据库层完成,所以复杂查询时,速度非常慢。

 

Memory储存引擎

数据存储在内存中,用来存储临时表,重启或者数据库崩溃,数据全部丢失。

只支持表锁,不支持TEXT和BLOB类型,默认采用哈希索引。

存储varchar时会按照char方式进行,会造成内存的浪费。

Mysql数据库采用Memory作为临时表,并将查询结果中间集存放在临时表中。

当含有TEXT或者BLOB类型的字段,会将其数据转到Myisam存储引擎并存储到磁盘。

但是MYISAM引擎又不缓存数据文件,所以这时的临时表,查询性能非常差。

 

Archive存储引擎

只支持插入和查询操作。

数据经过压缩后才存储,非常适合存储归档数据,如日志。

设计目标用来提供告诉的插入和查询操作。

 

Federated存储引擎

并不存放数据,指向远程数据库服务器上的表。

只支持Mysql数据库表,不支持异构数据库表。

 

Maria存储引擎

特点:

缓存数据和索引文件

支持行锁

提供MVCC功能

支持事务

更好的处理BLOB类型的性能

 

其他存储引擎

就不一一介绍了!

mysql数据量大于1000W时,性能会有降低,但是还好,不会有大的降低。

比较:

提示:

Mysql官方有非常好用的示例数据库,可以用来练习和测试。

地址:https://github.com/datacharmer/test_db

导入命令行

mysql -uroot -pxxx < employees.sql

Mysql的连接

本质是连接进程和数据库实例之间的通信。

常用的进程间通信的方式有:管道、命名管道、命名字、TCP/IP套接字、Unix域名套接字、消息队列、信号等。

TCP/IP连接

大多数都是采用这种方式,如果想远程连接,确保用户有相应的权限。

命名管道和共享内存

只能在本地连接时使用。

在配置文件增加参数

enable-named-pipe

共享内存的方式

shared-memory

客户端连入的时候加上--protocol-memory选项

Unix域套接字

也只能在本机使用。

mysql -uroot -pxxx -S /var/lib/mysql/mysql.socket

 

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/leomei91/p/7511546.html