MySQl学习-——Mysql体系结构与Mysql存储引擎
Mysql体系结构与Mysql存储引擎
Mysql体系结构
mysql体系结构图:
1) Connectors:指的是不同语言中与SQL的交互
max_connections 就是整个MySQL实例的最大连接数限制
max_user_connections 是单个用户的最大连接数,这里未指明是哪个用户,是任意一个用户。
2) Management Serveices & Utilities:系统管理和控制工具
备份和恢复的安全性,复制,集群,管理,配置,迁移和元数据
3) Connection Pool: 连接池
进行身份验证、线程重用,连接限制,检查内存,数据缓存;管理用户的连接,线程处理等需要缓存的需求。
4) SQL Interface: SQL接口
进行DML、DDL,存储过程、视图、触发器等操作和管理;用户通过SQL命令来查询所需结果。
5) Parser: 解析器
查询翻译对象的特权;SQL命令传递到解析器的时候会被解析器验证和解析。
6) Optimizer: 查询优化器
SQL语句在查询之前会使用查询优化器对查询进行优化。他使用的是“选取-投影-联接”策略进行查询。
用户也可以请求服务器给出优化过程的各种说明,以获知服务器的优化策略,为用户提供了参数基准,以便用户可以重写查询,架构和修改相关服务器配置,便于mysql更高效的运行。
7) Cache和Buffer: 查询缓存
在解析查询之前,要查询缓存,这个缓存只能保存查询信息以及结果数据。如果请求一个查询在缓存 中存在,就不需要解析,优化和执行查询了。直接返回缓存中所存放的这个查询的结果。这个缓存机制是由一系列小缓存组成的,比如表缓存,记录缓存,key缓存,权限缓存等。
8) Engine:存储引擎
Mysql支持多种存储引擎,最常用的存储引擎为MyIsam和InnoDB。
优化器并是不关心表使用了哪种存储引擎,但是存储引擎对服务器优化查询的方式是有影响的。优化器需要知道存储引擎的一些特性:具体操作的性能和开销方面的信息,以及表内数据的统计信息。例如,存储引擎支持哪些索引类型,这对于查询是非常有用的。
总结:mysql体系结构分为三层,分别为:客户端连接层,sql层,存储引擎层。客户端连接层主要指不同的语言与数据库的交互,如jdbc,odbc,php等。sql层是mysql体系结构的核心,主要又包括系统管理和控制工具(db的备份,恢复,复制,迁移等),连接池(主要负责用户的连接请求验证,权限验证和安全性等),SQL接口,查询缓存(只保存查询信息和数据结果),解析器,优化层(当有一条新的查询语句时,DBMS会先查看查询缓存,如果请求的查询在缓存中存在,则不用进行解析,优化和执行的操作,直接从查询缓存中读取即可,但如果请求的查询在查询缓存中不存在,则解析器会对查询语句进行分析,然后对其进行各种优化,这些优化包括了,查询语句的重写,读表的顺序,索引的选择等等)。存储引擎层(Mysql最常用的存储引擎有MyIsam,InnoDB等)。
Mysql存储引擎
l MyISAM:不是事务安全的,而且不支持外键,适合在以下几种情况下使用:
- 选择密集型的表。MyISAM存储引擎在筛选大量数据时非常迅速,这是它最突出的优点。
- 插入密集型的表。MyISAM的并发插入特性允许同时选择和插入数据。例如:MyISAM存储引擎很适合管理邮件或Web服务器日志数据。
l InnoDB:支持事务安全的引擎,支持外键、行锁、事务是他的最大特点,适合在以下几种情况下使用:
- 更新密集的表。InnoDB存储引擎特别适合处理多重并发的更新请求。
- 事务。InnoDB存储引擎是支持事务的标准MySQL存储引擎。
- 自动灾难恢复。与其它存储引擎不同,InnoDB表能够自动从灾难中恢复。
- 外键约束。MySQL支持外键的存储引擎只有InnoDB。
- 支持自动增加列AUTO_INCREMENT属性。
一般来说,如果需要事务支持,并且有较高的并发读取频率,InnoDB是不错的选择。
l Memory:使用MySQL Memory存储引擎的出发点是速度。为得到最快的响应时间,采用的逻辑存储介质是系统内存。虽然在内存中存储表数据确实会提供很高的性能,但当 mysqld守护进程崩溃时,所有的Memory数据都会丢失。获得速度的同时也带来了一些缺陷。它要求存储在Memory数据表里的数据使用的是长度不变的格式,这意味着不能使用BLOB和TEXT这样的长度可变的数据类型,VARCHAR是一种长度可变的类型,但因为它在MySQL内部当做长度固定不 变的CHAR类型,所以可以使用。一般在以下几种情况下使用Memory存储引擎:
- 目标数据较小,而且被非常频繁地访问。在内存中存放数据,所以会造成内存的使用,可以通过参数max_heap_table_size控制Memory表的大小,设置此参数,就可以限制Memory表的最大大小。
- 如果数据是临时的,而且要求必须立即可用,那么就可以存放在内存表中。
- 存储在Memory表中的数据如果突然丢失,不会对应用服务产生实质的负面影响。
MYISAM和InnoDB存储引擎只支持BTREE索引;MEMORY和HEAP存储引擎可以支持HASH和BTREE索引。
B树索引的优于散列索引的是,可以使用部分查询和通配查询,也可以使用<、>和>=等操作符方便数据挖掘。散列索引进行“相等比较”非 常快,但是对“范围比较”的速度就慢多了,因此散列索引值适合使用在=和<>的操作符中,不适合在<或>操作符中,也同样不适合 用在order by子句中。
【参考】http://www.cnblogs.com/yjf512/archive/2012/02/06/2339496.html
http://www.jb51.net/article/55849.htm