https://www.cnblogs.com/sharpest/p/10390035.html
https://www.cnblogs.com/rxbook/p/10786751.html
存储引擎 :存储引擎是一种用来存储MySQL中对象(记录和索引)的一种特定的结构(文件结构),处于MySQL服务器的最底层,直接存储数据。导致上层的操作,依赖于存储引擎的选择。
InnoDB ==> 5.5 默认的存储引擎 、 事务安全型存储引擎 、MySQL推荐使用的存储引擎。支持事务,行级锁定,外键约束
假如创建一个test 数据库 ,新建一张student表,选择存储引擎为innodb 会在mysqlserver 、data 文件夹下面的test目录生成三个文件
db.opt : 存放了数据库的配置信息,比如数据库的字符集还有编码格式
student.frm: 是表结构文件,仅存储了表的结构、元数据(meta),包括表结构定义信息等
student.idb: 是表索引文件,包括了单独一个表的数据及索引内容。
如果往表里插入了新的数据,则在mysql的data目录下会生成ibdata1文件,这个文件是存储了所有innodb表的数据。
使用innodb引擎时,需要理解独立表空间、共享表空间。
独立表空间: 每个表都会生成以独立的文件方式来存储,每个表都一个.frm的描述文件,还有一个.ibd文件
每个表都有自己独立的表空间;每个表的数据和索引都会存储在各个独立的表空间中;可以实现单表在不同的数据进行迁移;
共享表空间: 可以将表空间分成多个文件存放在各个磁盘上 ,数据和文件放在一起方便管理
innodb_file_per_table=1 为使用独占表空间
innodb_file_per_table=0 为使用共享表空间
innodb_data_home_dir 代表为数据库文件所存放的目录
innodb_log_group_home_dir 为日志存放目录
innodb_file_per_table 是否使用共享以及独占表空间来
innodb_data_file_path=ibdata1:10M:autoextend(可扩展大小的尺寸为10MB的单独文件,名为ibdata1)
1、数据按照主键顺序存储:插入时做排序工作,效率低。
事务、外键约束 : 都是为了维护数据的完整性。
innodb擅长处理并发的 row-level locking,实现了行级锁定,在一定情况下,可以选择行级锁来提升并发性。
总结:innodb擅长事务、数据的完整性及高并发处理,不擅长快速插入(插入前要排序,消耗时间)和检索。
MyISAM存储引擎介绍
MySQL<= 5.5 MySQL默认的存储引擎。
ISAM:Indexed Sequential Access Method(索引顺序存取方法)的缩写,是一种文件系统。
擅长与处理,高速读与写。
数据和索引分别存储于不同的文件中。
frm/ 结构
myd/ 数据
myi/ 索引
(3)功能
a.全文索引支持。(mysql>=5.6时innodb 也支持)
b.数据的压缩存储。.MYD文件的压缩存储。
进行压缩:使用工具 myisamPack完成压缩功能:该工具mysql自带
慢查询日志的使用
show variables like "%slow_query%" 查詢是否開啓 慢查询 、慢查询日志输出层log
show variables like "%long_query%" 查询慢查询的临界值
开启日志
set global slow_query_log=1;
设置临界值
set long_query_time=0.5; (超过这个时间 输出到慢查询日志层)
分区分表
分表和表分区的目的就是减少数据库的负担,提高数据库的效率,通常点来讲就是提高表的增删改查效率。
分区,partition,分区是将数据分段划分在多个位置存放,可以是同一块磁盘也可以在不同的机器。分区后,表面上还是一张表,但数据散列到多个位置了。
app读写的时候操作的还是大表名字,db自动去组织分区的数据。
Tip:分区与存储引擎无关,是MySQL逻辑层完成的。
MySQL提供4种分区算法:取余:Key,hash 条件:List,range 。
垂直分表
一张表中存在多个字段。这些字段可以分为常用字段和非常用字段,为了提高查表速度,我们可以把这两类字段分开来存储。主要目的,减少每条记录的长度。
服务器架构介绍
服务器架构,不仅仅是用一台MySQL