mysql 存储引擎
这段时间在看《High Performance MySQL》,看到存储引擎这个地方感到很多细节比较陌生,所以总结小记一些
为了适应各种不同的运行环境,MYSQL提供了多种不同的存储引擎(Storage Engine
),在应用程序开发这个层面上,开发者可以根据不同的需求选择适合的Storage Engine
方案,更为灵活的是,你可以根据每张表将要存储数据的特点,选择不同的Storage
Engine,也就是说,在一个MYSQL数据库中,可以混合使用多种不同的Storage Engine
首先小瞥一下MySQL的体系结构,在最高抽象层度下,可以用Garlan & Shaw的分层结构体系来表示(左)
其中应用层为所有RDBMS用户提供用户接口,逻辑层包括了所有核心功能的实现,物理层则负责将数据存储在硬件设备上。
图中右侧更为具体的描述了逻辑层的组成,查询处理子系统、事务管理子系统、恢复管理子系统和存储管理子系统共同组成了MySQL的逻辑层。相信
Storage Engine的位置是在Storage Management处,既Storage Engine属于Storage
Management子系统的一部分
为了让思路更清晰一些,下面给出一幅比较全面的体系结构图(或更确切的说是流程图,只是忽略了反馈)
上面三幅图来自于一篇非官方(不保证百分百的正确)的MySQL体系结构的报告,与《High Performance
MySQL》一书中给出的MySQL大体结构(下图,基本对应于Logic Layer,从第一幅图右侧可以看出MySQL logic
layer同样遵从分层体系结构)还是比较吻合的。
连接上图中第二层和第三层之间的接口是并不针对任何存储引擎的单一API,.大概由20个基本的类似“启动事务,返回结果集”等函数组成。存储引擎并不处理SQL,相互之间也不通信,它们的任务只是简单的响应高层传来的请求。
存储引擎各自的一些特点
上面提到的四种存储引擎都有各自适用的环境,这取决于它们独有的一些特征。主要体现在性能、事务、并发控制、参照完整性、缓存、 故障恢复,备份及回存等几个方面
目前比较普及的存储引擎是MyISAM和InnoDB.而MyISAM又是绝大部分Web应用的首选。MyISAM与InnoDB的主要的不同点在于性能和事务控制上。
MyISAM是早期ISAM(Indexed Sequential Access
Method,我现在用的MySQL5.0已经不支持ISAM了)的扩展实现,ISAM被设计为适合处理读频率远大于写频率这样一种情况,因此ISAM以
及后来的MyISAM都没有考虑对事物的支持,排除了TPM,不需要事务记录,ISAM的查询效率相当可观,而且内存占用很少。MyISAM在继承了这类
优点的同时,与时俱
相关文档:
mysqlfront连接时出现“程序注册时间到期了,程序将被限制在淡模式下运行”这个问题时,不用重装,只需在Mysql Front 的帮助菜单项的登记里输入以下Mysql Front的注册码即可。
MysqlFront注册码如下:
0hjwKUddagvS41S9TIb8EwuiXwo4+dlr
t8z9sq/YRlP9e0zTx7jVlriD8bWlwoJM
TRlllybJ0+wce5rRZGaMBnWJH5H0/Pwv
......
假如我有个user表,我想查询符合某些条件的第50个用户开始的10个用户,且不能使用id号between and那样查询,应该怎么写SQL语句?
在mysql数据库中有limit,offset语句可以方便的实现,那么在SQL server中呢?SQL Server是否支持limit和offset语句呢?
select top 10 * from
(select top 60 * from [user] order by userid) a ......
你可以创建一个文本文件“pet.txt”,每行包含一个记录,用定位符(tab)把值分开,并且以CREATE TABLE语句中列出的列次序给出。对于丢失的值(例如未知的性别,或仍然活着的动物的死亡日期),你可以使用NULL值。为了在你的文本文件中表示这些内容,
使用\N(反斜线,字母N)。例如,Whistler鸟的记录应为(这里值之 ......
MYSQL Cast函数 类型转换
BINARY
BINARY操作符将后面的字符串抛给一个二进制字符串。这是一种简单的方式来促使逐字节而不是逐字符的进行列比较。这使得比较区分大小写,即使该列不被定义为 BINARY或 BLOB。BINARY也会产生结尾空白,从而更加显眼。
mysql> SELECT 'a' = 'A';
-> 1
mysql> SELECT BINARY ' ......