5. 存储引擎

1. 存储引擎(表类型)

查看当前的默认存储引擎:

show variables like ‘%engine%‘;

查看支持的存储引擎:

show engines;

修改表的存储引擎:

alter table t1 engine = innodb;

[mysqld]

default_storage_engine=myisam                 ----修改数据库默认引擎

2. 常用引擎介绍

MySQL存储引擎比较 - 梦里梦外 - ITeye技术网站

MyISAM

最常用,
拥有较高的插入、查询速度

支持fulltext

不支持事务,
不能建外键

文章表、新闻表等安全性要求不高的

对事务的完整性、并发性要求不是很高的

应用以查询和插入为主,
只有很少的更新和删除操作

mysql数据库中的数据是以文件的形式存储在磁盘上的,可以cp文件的方式备份

存放在my.cnf中datadir所指目录下

1张myisam表对应3个文件

table1.frm 存放表结构       
table1.myd 存放数据         
table1.myi 存放索引

定期执行optimize table t1来改善性能,整理磁盘空间

MyISAM表还支持3中不同的存储格式:

1        静态表
          2        动态表          3        压缩表

静态表 是默认的存储格式,静态表中的字段都是非变长的字段,优点是:存储非常迅速,容易缓存,出现故障容易恢复;缺点是:占用的空间通常比动态表多。(注意:
在存储时,列的宽度不足时,用空格补足,当时在访问的时候并不会得到这些空格)

动态表 的字段是变长的,优点是:占用的空间相对较少,但是频繁地更新删除记录会产生碎片,需要定期改善性能,并且出现故障的时候恢复相对比较困难。

压缩表 占用磁盘空间小,每个记录是被单独压缩的,所以只有非常小的访问开支。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

InnoDB

支持事务,
支持外键约束

相比myisam,
innodb写入数据的效率差一些, 并且会占用更多的磁盘空间

订单表、资金表、 账单表、火车票表  ,对安全性要求高的, 需要事务功能的, 应选用innodb

修改存储方式

ibdata1 表空间文件

ib_logfile0 日志文件       
ib_logfile1 日志文件

ls
/var/lib/mysql/ds/

仅t1.frm文件(保存表结构)

数据和索引保存在表空间文件中

默认没有指定innodb_data_home_dir

默认在datadir下创建一个autoextend的共享表空间文件ibdata1

将所有库的InnoDB表的数据与索引存储在一个共享表空间文件ibdata1中,删数据后, ibdata1文件不会自动收缩

在磁盘监控时,
也许就报警不断了, 但实际上MySQL还可以运行良好

单个数据库的物理备份也是问题,
通常只能将数据mysqldump导出

[[email protected] database]#
/usr/local/mysql56/bin/mysqldump  ds stu > /tmp/db

指定表空间文件

innodb_data_home_dir=

innodb_data_file_path=/database2/ibdata1:100M;/tmp/ibdata2:50M:autoextend

把ibdata2也指在/database2下也可

最后一个数据文件必须是自动扩充的,
也只有最后一个文件允许自动扩充

数据首先放在ibdata1中,
存满100M后, 数据就放到ibdata2中, 存满50MB后, ibdata2将自动增长

1.
rm -f /database/ib_log* -- 可能要

2.
加2条配置项

3.
建文件夹/database2且chown

4.
启动服务

以后就只用新指定的ibdata1与ibdata2了,
原来的/database/ibdata1就没用上了, 但它里面还存有数据, 要先切回去把它里面的数据导出来

Innodb有两种管理表空间的方法:

1.
共享表空间, 5.5默认

2.
独立表空间, 5.6默认

独立表空间:

1.
每张表都有一个自已独立的表空间文件

2.
每张表的数据和索引都会存在自已的表空间文件中

drop table自动回收表空间  ,删除大量数据后可以通过alter table t1 engine =
innodb;回收空间

共享表空间在insert操作上稍有优势,
其它都没独立表空间好

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

memory(heap)

表中的数据放在内存中,
没有实际存入磁盘, 一旦服务关闭, 表中的数据就会丢失

服务器需要足够的内存来存储memory表

极高的增删改查效率

当不再需要memory表里的数据时,
要释放被memory表使用的内存, 应delete from或truncate table或drop table

memory表仅对应1个.frm文件,
访问非常快

支持btree与hash索引,
默认使用hash索引

对于临时中转表,
可以用memory引擎, 速度最快

主要用于统计操作的中间结果表

select
case age when 20 then salary*1. 2 when 30 then salary*1.3 else salary*1.4 end
from ds.stu;

这是临时结果,
可以存到memory表t1中

create
table t1()engine = memory;

insert
into t1 select …

insert  into  t1    select  stuID ,stuName,age, case age when 20 then salary*1. 2 when 30 then salary*1.3 else
salary*1.4  end  as salary from ds.stu

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

merge(mrg_myisam)

merge存储引擎是一组myisam表的组合

这些myisam表必须结构完全相同,
merge表本身没有数据

对merge表进行的查询、更新、删除, 实际上是对内部的myisam表进行的

对merge表的插入操作,
是通过insert_method子句定义插入的表, 可以有3个不同的值

insert_method=first|last|no

first插入在第1张表上,
last插入在最后一张表上

no或不定义这个子句,
表示不能对这个merge表执行插入操作

drop
merge表, 只是删除merge表的定义, 对内部的myisam表无任何影响

merge表在磁盘上的对应文件

create
table payment_11

(

id
int,

money
dec(6, 1)

)
engine=myisam;

create
table payment_12

(

id
int,

money
dec(6, 1)

)
engine=myisam;

create
table payment_all

(

id
int,

money
dec(6, 1)

)
engine=merge union=(payment_11, payment_12) insert_method=last;
创建时不会检查11、12存不存在

通常我们使用merge表来透明地对多个表进行查询和更新操作

来自为知笔记(Wiz)

时间: 2024-08-04 15:55:42

5. 存储引擎的相关文章

Innodb存储引擎

特点:支持事务.锁定机制的改进,Innodb改变了MylSAM的锁机制,实现了行锁.实现外键..frm文件来存放结构定义相关的元数据,但是表数据和索引数据是存在一起的,每个表单独存放还是表存放在一起,完全由用户来决定. 理论:Innodb的物理结构分为两大部分 数据文件(表数据和索引数据) 存放表中的数据和所有的索引数据,包括主键和其他普通索引.Innodb中,存在了表空间这样的概念,和oracle的表空间又有较大的不同.Innodb的表空间分为两种形式.一种是共享表空间,就是所有表和索引数据存

mysql存储引擎

mysql的物理文件组成包括错误日志,查询日志,慢查询日志,事务日志,二进制日志. 日志文件中记录mysql数据库运行期间发生的变化,记录mysql数据库的客户端连接状况,sql语句的执行情况和错误信息. mysql的逻辑结构可以看成是二层架构,第一层叫做SQL layes,数据库系统处理底层数据库之前的所有工作都在这一层完成,包括权限判断,sql解析,执行计划优化,query cache的处理等.第二层就是存储引擎层,叫做storage engine layes,也是底层数据存取操作实现部分,

MySQL存储引擎MyISAM与InnoDB的优劣

使用MySQL当然会接触到MySQL的存储引擎,在新建数据库和新建数据表的时候都会看到. MySQL默认的存储引擎是MyISAM,其他常用的就是InnoDB了. 至于到底用哪种存储引擎比较好?这个问题是没有定论的,需要根据你的需求和环境来衡量.所以对这两种引擎的概念.原理.异同和各自的优劣点有了详细的了解之后,再根据自己的情况选择起来就容易多了. MyISAM InnoDB 存储结构 每张表被存放在三个文件: frm-表格定义 MYD(MYData)-数据文件 MYI(MYIndex)-索引文件

Mysql各种存储引擎的特性以及如何选择存储引擎

几个常用存储引擎的特点 下面我们重点介绍几种常用的存储引擎并对比各个存储引擎之间的区别和推荐使用方式. 特点 Myisam BDB Memory InnoDB Archive 存储限制 没有 没有 有 64TB 没有 事务安全 支持 支持 锁机制 表锁 页锁 表锁 行锁 行锁 B树索引 支持 支持 支持 支持 哈希索引 支持 支持 全文索引 支持 集群索引 支持 数据缓存 支持 支持 索引缓存 支持 支持 支持 数据可压缩 支持 支持 空间使用 低 低 N/A 高 非常低 内存使用 低 低 中等

MySQL存储引擎与数据类型

1 数据存储引擎 存储引擎的概念是MySQL的一个特性,它指定了表的类型(诸如表如何存储与索引数据.是否支持事务.外键等),表在计算机中的存储方式. 1.1 MySql支持的数据存储引擎 查看引擎信息 通过命令来查看引擎信息 show engines; 默认存储引擎为InnoDB,如下列出: Engine Support Comment Transactions XA Savepoints InnoDB DEFAULT Supports transactions, row-level locki

Tair ldb(leveldb存储引擎)实现介绍

简介 tair 是淘宝自己开发的一个分布式 key/value 存储引擎. tair 分为持久化和非持久化两种使用方式. 非持久化的 tair 可以看成是一个分布式缓存. 持久化的 tair 将数据存放于磁盘中. 为了解决磁盘损坏导致数据丢失, tair 可以配置数据的备份数目, tair 自动将一份数据的不同备份放到不同的主机上, 当有主机发生异常, 无法正常提供服务的时候, 其于的备份会继续提供服务. tair 的总体结构 tair 作为一个分布式系统, 是由一个中心控制节点和一系列的服务节

如何选择mysql存储引擎

一.MySQL的存储引擎 完整的引擎说明还是看官方文档:http://dev.mysql.com/doc/refman/5.6/en/storage-engines.html 这里介绍一些主要的引擎 1.InnoDB存储引擎 InnoDB是MySQL的默认事务型引擎,它被设计用来处理大量的短期(short-lived)事务.除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎. 建议使用MySQL5.5及以后的版本,因为这个版本及以后的版本的InnoDB引擎性能更好. M

InnoDB存储引擎介绍-(4)Checkpoint机制二

原文链接 http://www.cnblogs.com/chenpingzhao/p/5107480.html 一.简介 思考一下这个场景:如果重做日志可以无限地增大,同时缓冲池也足够大,那么是不需要将缓冲池中页的新版本刷新回磁盘.因为当发生宕机时,完全可以通过重做日志来恢复整个数据库系统中的数据到宕机发生的时刻. 但是这需要两个前提条件:1.缓冲池可以缓存数据库中所有的数据:2.重做日志可以无限增大 因此Checkpoint(检查点)技术就诞生了,目的是解决以下几个问题:1.缩短数据库的恢复时

04-MySQL的存储引擎和列的常用类型

1. MySQL中的数据库分类        2. MySQL中的存储引擎 MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供不同的功能和能力.通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能. MyISAM:拥有较高的插入,查询速度,但不支持事务,不支持外键. InnoDB:支持事务,支持外键,支持行级锁定,性能较低.InnoDB 存储引擎提供了具有提交.回滚和崩溃恢复能力的事务安全

查看和改动MySQL数据库表存储引擎

要做一名合格的程序猿,除了把代码写的美丽外,熟知数据库方面的知识也是不可或缺的.以下总结一下怎样查看和改动MySQL数据库表存储引擎:        1.查看数据库所能支持的存储引擎:show engines;        2.查看某个数据库中某个表所使用的存储引擎:show table status from db_name where name='table_name';(注:将where条件去掉后能够查看某个数据库中全部表的存储引擎情况)        3.改动表引擎方法:alter t