Mysql优化2:存储引擎优化和存储引擎选择

1存储引擎优化

1.1存储引擎优化是什么?

通过一定的技术存储在数据库当中的,数据库的数据是以文件的形式存在硬盘中,技术不只一种,并且每种技术都有自己独特的性能和功能体现。存储数据的技术和其功能的合并称为“存储引擎”。
数据库存到不同的存储引擎里,所有的特性与当前的存储引擎的特性有一定关联。
需要按照项目的需求、特点选择不同的存储引擎。
查看mysql支持的存储引擎:

mysql>show engines

1.2InnoDB

数据库每个表的数据设计有三方面信息:表结构、数据、索引。
特点:支持事务、行级锁定、外键。
1.2.1表结构、数据、索引的物理存储
创建一个InnoDB的表,会生成一个表结构文件,表名.frm
1.2.2数据、索引的物理存储位置
所有InnoDB表的索引和数据存到一个生成的ibdata1文件中,给InnoDB类型的表的数据和索引创建自己对应的存储空间

mysql>show variables like `innodb_file_per_table`;

执行上面的命令后会看到一个value值为OFF的,默认情况下每个innodb表的数据和索引不会创建单独的文件存储,需要执行下面的语句

mysql>set global innodb_file_per_table = 1;

这时候再创建innodb表会创建自己对应的数据和索引存储文件,后缀是ibd的文件。

1.2.3事务、外链
innodb支持事务、外链
事务:把许多写入的sql语句捆绑在一起,要么执行,要么不执行
四个特性:原子性,一次性,持久性,隔离性
start transaction;//开启事务
sql语句;如果有问题就执行rollback;
如果sql语句都正确,就执行conmit;

外键:假设有两个表A和B,B表的主键是A表的普通字段。A表中的这个普通字段就 是外键。外键有约束:必须先写B表的数据才能写A表的外键,而且这个A表的外键必须来自B表的主键值。真是项目中很少使用外键。
1.2.4并发性
innodb的并发性非常高。
多人同时操作该数据表,为了保证数据内容不会被随意修改,要对信息锁定,该类型表的锁定级别为‘行锁’,只锁定被操作的当前记录。
1.2.5数据存储顺序
innodb表数据的存储是按照主键的顺序排列每个写入的数据,写入的速度快。

1.3MyIsam

1.3.1该类型表的表结构、数据、索引都有自己独立的存储文件,创建表时会生成三个文件
表结构对应的文件后缀是frm,索引对应的文件后缀是MYI,数据对应的文件后缀是MYD
特点:独立的存储文件可以单独备份,还原。
1.3.2数据存储顺序
myisam表数据的存储是按自然顺序排列数据的。
1.3.3并发性
myisam类型的并发性较低,该类型的锁定级别是:表锁。
1.3.4压缩机制
如果一个数据表的数据非常多,为了节省存储空间,需要对该表进行压缩处理。

mysql>insert into order select null,order_num from order;
#这条语句代表着从order表中查到的数据插入到order表中

压缩数据表的数据:
在mysql的bin目录下有个myisampack.exe,执行myisampack.exe 表的完整路径。
然后重建索引:myisamchk.exe -rq 表的完整路径。
(以上之所以用表的完整路径是因为myisam表生成了数据和索引相对应的存储文件,完整路径指的就是这些存储文件的位置。)
最后刷新一下数据库中的表:

mysql>flush table order;

压缩后的数据表变成了只读表,不能写入信息。只有内容固定的数据表适合压缩,比如全国各地的信息表、收货地址信息表。
如果必须要写入数据,那就只能解压后再写,写完再压缩。
解压数据表:
myisamchk –unpack “表的完整路径”;
解压后的索引自动创建。
然后执行:

mysql>flush table order;

存储引擎选择(innodb和myisam):
网站大多数情况下都是读写操作的一般选用myisam类型,比如dedecms、phpcms内容管理系统、discuz论坛;
网站对业务逻辑要求比较高的一般选用innodb类型,比如办公网站、商城;
mysql5.5以上版本默认都是选择innodb存储引擎。
总结:
innodb存储引擎适合做修改、删除;(行锁,所以操作很方便)
myisam存储引擎适合做读取、写入;(表锁,所以读取很方便)
archive存储引擎(归档型存储引擎)只有写入和查询操作,比较适合存储‘日志’性质的信息。
memory存储引擎最大特点就是操作的速度非常快,因为他是存储到内存中的,该存储引擎适合存储临时信息,假如服务器断电,该类型的存储数据立即丢失。

你可能感兴趣的:(mysql,个人笔记)