存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)
在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql数据库提供了多种存储引擎。
用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎。
查看引擎:
mysql> show engines;
mysql> SHOW VARIABLES LIKE '%storage_engine%';
mysql> show create table t1;
mysql> show table status like 't1';
关闭不必要的引擎:
不想用哪个,加上跳过哪个就可以,重启mysql,这样也可以优化数据库。
默认如果不想他们启动的话,修改配置文件
#vim /etc/my.cnf
[mysqld]
skip-mrg_myisam
skip-csv
skip-memory
临时指定引擎:
mysql> create table innodb1(id int)engine=innodb;
修改默认引擎:
/etc/my.cnf
[mysqld]
default-storage-engine=INNODB
修改已经存在的表的引擎:
mysql> alter table t2 engine=myisam;
MyISAM存储引擎
由于该存储引擎不支持事务、也不支持外键,所以访问速度较快。因此当对事务完整性没有要求并以访问为主的应用适合使用该存储引擎。
.myi index 存储索引
.myd data 存储数据
.frm 存储表结构
InnoDB存储引擎
由于该存储引擎在事务上具有优势,即支持具有提交、回滚及崩溃恢复能力等事务特性,所以比MyISAM存储引擎占用更多的磁盘空间。
因此当需要频繁的更新、删除操作,同时还对事务的完整性要求较高,需要实现并发控制,建议选择。
大型数据库用innodb
[root@www var]# pwd
/usr/local/mysql/var
[root@www var]# ls ib*
ibdata1 ib_logfile0 ib_logfile1
innodb类型的表的数据存在ibdata1里面,不像myisam生成3个文件, ib_logfile0 ib_logfile1存放日志
初始是10M,每次增加8M ,初始大小可以指定,要修改配置文件
#vim /etc/my.cnf
innodb_data_file_path=ibdata1:20M:autoextend:max:1000M
设定初始大小是20M,增幅也是8M 设定峰值是1000M,就是指定最大能增加到1000M
innodb_data_home_dir=/data
指定他的存储数据的位置,也就是ibdata1的位置
数据分开存储:
比放在一块硬盘里访问速度快
默认的数据都保存在var下面,可以人为的改变他们的存储位置
只适用于innodb类型,.frm文件必须得放在var下,不能指定放到别的地方
#mkdir data 最好是不同的硬盘上
#chown mysql data
mysql> create table tb1(name char(20)) data directory='/data';
data directory=指定数据文件的位置
MEMORY
速度快,比myisam快30%,当数据库重启之后,数据就会丢失,因为他是存在内存里的.适合于需要快速的访问或临时表。
mysql> create table t20(id int,name char(10)) type=memory; 创建一个memory类型的表
BLACKHOLE
黑洞存储引擎,可以应用于主备复制中的分发主库。
mysql> desc blackhole1;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
1 row in set (0.00 sec)
mysql> insert into blackhole1 values(1);
Query OK, 1 row affected (0.00 sec)
mysql> select * from blackhole1;
Empty set (0.00 sec)
网友评论