1)库 :属性 名称 2)表:字段 (名称,属性,数据类型、约束) 记录 (完整的数据) 3)关系:库–表--记录 (记录 字段)
3.物理结构 1)库:操作系统下的目录 2)表:多个文件组成 Myisam表: (.frm:表定义) (.myd:数据文件) (.myi:数据索引) Innodb表: (.frm:表定义) (.ibd:数据和索引) 3)关系–表--段:一个表就是一个段,包含一个或者多个区/簇–区 (1个或者多个连续的页: 最小的I/单元(16KB)
存储引擎介绍 MyISAM存储引擎中的数据用不同的技术存储在文件(或者内存中),这些以不同技术及以配套相关的功能 在MySQL中被称作储存引擎
1.MyLSAM的介绍 MyLSAM存储引擎是Mysql关系型数据库5.5版本之前默认的存储引擎,的前身是ISAM。ISAM是一个定义明确的 且经历时间考验的数据表格管理方法,被查询次数远大于更新次数。 2.MyISAM的特点 1)不支持事务,需要支持事务的系统不能使用MyISAM作为存储引擎。 2)表级锁定形式,数据在更新时锁定整个表 3)数据库在读写过程中相互阻塞: 在数据写入的过程中阻塞用户对数据的读取 在数据读取的过程中阻塞用户写入数据 4)可以通过key_buffer_size来设置缓存索引,提高访问性能,减少磁盘容量。 5)采用MySAM存储引擎进行数据单独写入或读取,速度较快且占用资源相对较少 6)MyISAM存储不支持外键约束,只支持全文索引。 7)每个MyISAM在磁盘上存储成三个文件。每个文件的名字均已表的名字开始,扩展名文件类型 .frm文件存储表定义 数据文件的扩展名为:MYD 索引文件的扩展名为:MYI
场景1 1)不需要事务支持 2)单方面读取数据比较多的业务 3)使用读写并发访问相对较低的业务 4)数据修改相对较少的业务 场景2 1)不需要事务支持 2)单方面读取数据比较多的业务 3)已读为主的业务,如www、blog图片信息数据库、用户数据库、商品库等业务。 4)对数据业务一致性要求不是非常高的业务 5)服务器硬件资源相对比较差
InnoDB存储引擎
InnoDB存储引擎,能够支持事务安全表,具有提交、回滚和崩溃恢复的能力。支持行级锁定, 并且可以在SELECT语句中提供一个与Oracle风格类似的非锁定读,也支持FOREIGN KEY强制 InnoDB是为处理巨大数据量时的最大性能而设计的。
InnoDB特点介绍 特点 1)支持事务,支持四个事务隔离级别。(A、C、I、D) 2)行级锁定,但是全表扫描仍然会是表级锁定 3)读写阻塞与事务隔离级别相关 4)具有非常高效的缓存特性,能缓存索引,也能缓存数据 5)表与主键以簇的方式存储 6)支持分区、表空间,类似Oracle数据库 7)支持外键约束,MySQL5.5以前不支持全文索引,5.5版本以后支持。 8)适合对硬件资源要求较高的场合
InnoDB适用的生产场景 1)业务需要事务支持 2)行级锁定对高并发有较好的适应能力,对确保查询是通过索引完成 3)业务数据更新较为频繁的场景,如论坛、微博等 4)业务数据一致性较高,例如银行业务 5)硬件设备内存较大,利用InnoDB较好的缓存能力来提高内存利用率,减少磁盘IO的压力
企业选择存储引擎的依据 1)存储引擎支持的字段和数据类型 所有引擎都支持通用的数据类型,但是不是所有的引擎都支持其他字段类型,如二进制对象 2)锁定类型 不同的存储引擎支持不同级别的锁定 表锁定:MyISAM 行锁定:InnoDB支持 3)索引的支持 建立索引在搜索和恢复数据库中的数据时能够显著提高性能。 不同的存储引擎提供不同的索引的技术。 有些引擎根本不支持索引。 4)事务处理的支持 事务处理功能提供向表中更新和插入信息的可靠性 可根据企业业务要否要支持事务选择存储引擎。
1.查看数据数据库可配置的存储引擎类型 使用show engines 可以查看MySQL默认使用的储存引擎 Engine列表示当前版本的MYSQL所支持的引擎类型 Support列对应引擎是否能使用 Transactions列表示对应引擎是否支持事务; default表示该引擎为当前默认存储引擎。
2.查看表正在使用的存储引擎 ①使用show table status 命令可以查看表正在使用的存储引擎, 格式 show table status from 库名 where name = ‘表名’; 例子: ②使用 create命令也可以查看表正在使用的存储引擎; 格式 show create table 表名; 3.配置存储引擎为所选择的类型 当需要选择非默认存储引擎时,修改存储引擎的方法有四种 ①使用alter table 命令修改 格式:alter table table_name engine= 引擎 ②修改MYSQL的配置文件my.cnf,可以指定default-storage-engine选项设置的默认的存储引擎 [root@localhost ~]# vim /etc/my.cnf [mysqld] ##在mysqld下 default-storage-engine=MyISAM [root@localhost ~]# systemctl restart mysqld
③使用create table创建表时用engine指定存储引擎,会使用存储引擎 ④使用mysq_conver_table_format命令可以批量转换存储引擎 (略) 格式:mysql_convert_table_format --user=root --password=密码 --socket=/temp/mysql.scok --engine=引擎 库名 表名 各命令参数含义