mysql引擎整理

MySQL数 据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MYSQL。在缺省情况下,MYSQL支持三个引 擎:ISAM、MYISAM和HEAP。另外两种类型INNODB和BERKLEY(BDB),也常常可以使用。如果技术高超,还可以使用MySQL++ API自己做一个引擎。下面介绍几种数据库引擎:

    ISAM:ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到 数据库被查询的次数要远大于更新的次数。因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源。ISAM的两个主要不足之处在于,它不 支持事务处理,也不能够容错:如果你的硬盘崩溃了,那么数据文件就无法恢复了。如果你正在把ISAM用在关键任务应用程序里,那就必须经常备份你所有的实 时数据,通过其复制特性,MYSQL能够支持这样的备份应用程序。

    MyISAM:MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎。除了提供ISAM里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操作,其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。MyISAM还有一些有用的扩展,例如用来修复数据库文件的MyISAMCHK工具和用来恢复浪费空间的 MyISAMPACK工具。MYISAM强调了快速读取操作,这可能就是为什么MySQL受到了WEB开发如此青睐的主要原因:在WEB开发中你所进行的大量数据操作都是读取操作。所以,大多数虚拟主机提供商和INTERNET平台提供商只允许使用MYISAM格式。MyISAM格式的一个重要缺陷就是不能在表损坏后恢复数据。

    HEAP:HEAP允许只驻留在内存里的临时表格。驻留在内存里让HEAP要比ISAM和MYISAM都快,但是它所管理的数据是不稳定的,而且如果在关机之前没有进行保存,那么所有的数据都会丢失。在数据行被删除的时候,HEAP也不会浪费大量的空间。HEAP表格在你需要使用SELECT表达式来选择和操控数据的时候非常有用。要记住,在用完表格之后就删除表格。

    InnoDB:InnoDB数据库引擎都是造就MySQL灵活性的技术的直接产品,这项技术就是MYSQL++ API。在 使用MYSQL的时候,你所面对的每一个挑战几乎都源于ISAM和MyISAM数据库引擎不支持事务处理(transaction process)也不支持外来键。尽管要比ISAM和 MyISAM引擎慢很多,但是InnoDB包括了对事务处理和外来键的支持,这两点都是前两个引擎所没有的。如前所述,如果你的设计需要这些特性中的一者 或者两者,那你就要被迫使用后两个引擎中的一个了。

MySQL 官方对InnoDB是这样解释的:InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读,这些特色增加了多用户部署和性能。没有在InnoDB中扩大锁定的需要,因为在InnoDB中行级锁定适合非常小的空间。InnoDB也支持FOREIGN
KEY强制。在SQL查询中,你可以自由地将InnoDB类型的表与其它MySQL的表的类型混合起来,甚至在同一个查询中也可以混合。

InnoDB是为处理巨大数据量时的最大性能设计,它的CPU效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。

InnoDB存储引擎被完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。InnoDB存储它的表&索引在一个表空间中,表空间可以包含数个文件(或原始磁盘分区)。这与MyISAM表不同,比如在MyISAM表中每个表被存在分离的文件中。InnoDB
表可以是任何尺寸,即使在文件尺寸被限制为2GB的操作系统上。

InnoDB默认地被包含在MySQL二进制分发中。Windows Essentials installer使InnoDB成为Windows上MySQL的默认表。

InnoDB被用来在众多需要高性能的大型数据库站点上产生。著名的Internet新闻站点Slashdot.org运行在InnoDB上。
Mytrix, Inc.在InnoDB上存储超过1TB的数据,还有一些其它站点在InnoDB上处理平均每秒800次插入/更新的

一般来说,MyISAM适合:(1)做很多count 的计算;(2)插入不频繁,查询非常频繁;(3)没有事务。InnoDB适合:(1)可靠性要求比较高,或者要求事务;(2)表更新和查询都相当的频繁,并且表锁定的机会比较大的情况。

一般情况下,MySQL会默认提供多种存储引擎,可以通过下面的查看:

(1)看你的MySQL现在已提供什么存储引擎:
mysql> show engines;

(2)看你的MySQL当前默认的存储引擎:
mysql> show variables like ‘%storage_engine%‘;

(3)你要看某个表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎):
mysql> show create table 表名;

所有的性能测试在:Micrisoft window xp sp2 , Intel(R) Pentinum(R) M processor 1.6oGHz 1G 内存的电脑上测试。

测试方法:连续提交10个query, 表记录总数:38万 , 时间单位 s

引擎类型                    MyISAM                InnoDB              性能相差

count                      0.0008357            3.0163                3609

查询主键                   0.005708              0.1574                27.57

查询非主键                  24.01                   80.37                 3.348

更新主键                   0.008124             0.8183                 100.7

更新非主键                0.004141             0.02625               6.338

插入                         0.004188             0.3694                 88.21

(1)加了索引以后,对于MyISAM查询可以加快:4 206.09733倍,对InnoDB查询加快510.72921倍,同时对MyISAM更新速度减慢为原来的1/2,InnoDB的更新速度减慢为原来的1/30。要看情况决定是否要加索引,比如不查询的log表,不要做任何的索引。

(2)如果你的数据量是百万级别的,并且没有任何的事务处理,那么用MyISAM是性能最好的选择。

(3)InnoDB表的大小更加的大,用MyISAM可省很多的硬盘空间。

在我们测试的这个38w的表中,表占用空间的情况如下:
            引擎类型                    MyISAM               InnoDB
            数据                       53,924 KB           58,976 KB
            索引                       13,640 KB           21,072 KB
            占用总空间              67,564 KB           80,048 KB
 
        另外一个176W万记录的表, 表占用空间的情况如下:

引擎类型                MyIsam               InnorDB
            数据                   56,166 KB           90,736 KB
            索引                   67,103 KB           88,848 KB
            占用总空间        123,269 KB         179,584 KB

时间: 2024-10-24 11:37:04

mysql引擎整理的相关文章

mysql引擎和mysql日志相关总结

mysql日志 01.错误日志: 可以在my.cnf里面配置: [mysqld_safe] log-error=/data/3306/mysql_qb3306.err 02.查询日志 普通查询日志:纪录客户端连接信息和执行的sql语句信息(由于占用内存,作用也不是很大,就一般是关着的) mysql> show variables like 'general_log%'; +------------------+--------------------------+ | Variable_name

生产环境批量修改mysql引擎

生产环境中如何批量修改MySQL引擎 一般来说这样的需求并不多见,但是偶尔也会有,在这里我们推荐使用sed对备份的内容进行引擎转换的方式,当然了,不要忘记修改my.cnf使之支持并能高效的使用对于的引用. 方法1 mysql命令语句修改 创建后引擎更改,5.0版本之后 alter table lvnian engine=innodb; alter table lvnian engine=MyISAM; 其中lvnian是表名 更改实例 ##############################

mysql引擎查看和修改

#1 查看mysql引擎(其中default为默认) show engines; #2 修改mysql引擎 vi /etc/my.cnf [mysqld] default-storage-engine=INNODB /etc/init.d/mysqld restart

mysql待整理

前面讲到的:insert - select - where not exist 其实好像也是为了实现:插入数据时,如果有重复则不插入.参见:http://snowolf.iteye.com/blog/1568926 和INSERT IGNORE INTO 差不多,不过前者可以自己加条件,后者只能根据主键来判断是否重复. MySql一些开发规范:http://www.2cto.com/database/201403/285170.html 1. MYSQL SQL_NO_CACHE的真正含义 ht

浅谈MYSQL引擎之INNODB引擎

MYSQL 常用的引擎主要有一下几种,MRG_MYISAM .CSV .MyISAM.InnoDB.MEMORY ,NDB,其中MyISAM.InnoDB是mysql最常用的存储引擎,今天主要讨论 InnoDB引擎. 一.什么是InnoDB引擎 InnoDB引擎是MYSQL数据库的另一个重要的额存储引擎,正成为目前MYSQL AB所有发行新版的标准,被包含在所有二进制安装包里. 和其他的存储引擎相比,InnoDB引擎的优点支持兼容ACID的事物,以及参数完整性(即对外建的支持). MYSQL5.

mysql 命令整理

登录命令 mysql -uroot -p21313 新建用户 insert into mysql.user(Host,User,Password) values("localhost","phplamp",password("1234")); 刷新权限 flush privileges; 创建数据库 create database 数据库名; 显示数据库 show database; 切换数据库 use 数据库名: 数据库授权 grant all

MySQL · 引擎特性 · InnoDB 崩溃恢复过程

MySQL · 引擎特性 · InnoDB 崩溃恢复过程 在前面两期月报中,我们详细介绍了 InnoDB redo log 和 undo log 的相关知识,本文将介绍 InnoDB 在崩溃恢复时的主要流程. 本文代码分析基于 MySQL 5.7.7-RC 版本,函数入口为 innobase_start_or_create_for_mysql,这是一个非常冗长的函数,本文只涉及和崩溃恢复相关的代码. 在阅读本文前,强烈建议翻阅我们之前的两期月报:1. MySQL · 引擎特性 · InnoDB

深入浅析mysql引擎

mysql引擎 mysql数据库引擎取决于mysql在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译mysql.在缺省情况下,mysql支持三个引擎:ISAM,MYISAM和HEAP.另外两种类型INNODB和BERKLEY(BDB),也常常可以使用.下面介绍几种数据库引擎: ISAM:ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到 数据库被查询的次数要远大于更新的次数.因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源.ISAM的两

Mysql引擎介绍

Mysql引擎介绍 Innodb存储引擎 支持事务,在OLTP方面支持行级锁.外键: 通过多版本并发控制MVCC来获得高并发性,并实现SQL的4种隔离级别(默认repeatable): 提供insert buffer,double write,自适应hash索引,预读: 对于表中数据的存储,innodb采用clustered.每张表的存储按照主键的顺序存放:若表没有显式定义主键,innodb会为每一行生成一个6字节的rowid,作为主键. Myisam存储引擎 不支持事务,表锁,全文索引,对OL