关于 MySQL 存储引擎浅谈(2)

MyISAM因设计简单,数据以紧密格式存储,所以某些场景下性能很好,但是它的表锁又带来了性能问题,如果你发现所有的查询都长期处于“Locked”状态,表锁就是罪魁祸首了。

因此,对于只读数据,或者表比较小,可以忍受修复操作的可以依然使

用MyISAM,对于不需要事务的应用,选择MyISAM存储引擎,或许可以获得更高的性能,MySQL自带的默认的information_schema库中就存在使用MyISAM存储引擎的表。

| TRIGGERS | CREATETEMPORARY TABLE `TRIGGERS` (

`TRIGGER_CATALOG` varchar(512) NOT NULLDEFAULT '',

`TRIGGER_SCHEMA` varchar(64) NOT NULL DEFAULT'',

`TRIGGER_NAME` varchar(64) NOT NULL DEFAULT'',

`EVENT_MANIPULATION` varchar(6) NOT NULLDEFAULT '',

`EVENT_OBJECT_CATALOG` varchar(512) NOT NULLDEFAULT '',

`EVENT_OBJECT_SCHEMA` varchar(64) NOT NULLDEFAULT '',

`EVENT_OBJECT_TABLE` varchar(64) NOT NULLDEFAULT '',

`ACTION_ORDER` bigint(4) NOT NULL DEFAULT'0',

`ACTION_CONDITION` longtext,

`ACTION_STATEMENT` longtext NOT NULL,

`ACTION_ORIENTATION` varchar(9) NOT NULLDEFAULT '',

`ACTION_TIMING` varchar(6) NOT NULL DEFAULT'',

`ACTION_REFERENCE_OLD_TABLE` varchar(64)DEFAULT NULL,

`ACTION_REFERENCE_NEW_TABLE` varchar(64)DEFAULT NULL,

`ACTION_REFERENCE_OLD_ROW` varchar(3) NOTNULL DEFAULT '',

`ACTION_REFERENCE_NEW_ROW` varchar(3) NOTNULL DEFAULT '',

`CREATED` datetime DEFAULT NULL,

`SQL_MODE` varchar(8192) NOT NULL DEFAULT '',

`DEFINER` varchar(77) NOT NULL DEFAULT '',

`CHARACTER_SET_CLIENT` varchar(32) NOT NULLDEFAULT '',

`COLLATION_CONNECTION` varchar(32) NOT NULLDEFAULT '',

`DATABASE_COLLATION` varchar(32) NOT NULLDEFAULT ''

)ENGINE=MyISAM DEFAULT CHARSET=utf8 |

3. Memory存储引擎

Memory存储引擎将表中数据放在内存中,因此速度非常快,但因其支持表锁,所以并发性能较差,最糟糕的是这个存储引擎在数据库重启或崩溃之后表中的数据将全部丢失,它只适用于存储临时数据的临时表,MySQL中一般使用这个存储引擎来存放查询的中间结果集,如MySQL自带的默认的information_schema库中就存在较多使用Memory存储引擎的表。

|TABLES | CREATE TEMPORARY TABLE `TABLES` (

`TABLE_CATALOG` varchar(512) NOT NULL DEFAULT'',

`TABLE_SCHEMA` varchar(64) NOT NULL DEFAULT'',

`TABLE_NAME` varchar(64) NOT NULL DEFAULT '',

`TABLE_TYPE` varchar(64) NOT NULL DEFAULT '',

`ENGINE` varchar(64) DEFAULT NULL,

`VERSION` bigint(21) unsigned DEFAULT NULL,

`ROW_FORMAT` varchar(10) DEFAULT NULL,

`TABLE_ROWS` bigint(21) unsigned DEFAULTNULL,

`AVG_ROW_LENGTH` bigint(21) unsigned DEFAULTNULL,

`DATA_LENGTH` bigint(21) unsigned DEFAULTNULL,

`MAX_DATA_LENGTH` bigint(21) unsigned DEFAULTNULL,

`INDEX_LENGTH` bigint(21) unsigned DEFAULTNULL,

`DATA_FREE` bigint(21) unsigned DEFAULT NULL,

`AUTO_INCREMENT` bigint(21) unsigned DEFAULTNULL,

`CREATE_TIME` datetime DEFAULT NULL,

`UPDATE_TIME` datetime DEFAULT NULL,

`CHECK_TIME` datetime DEFAULT NULL,

`TABLE_COLLATION` varchar(32) DEFAULT NULL,

`CHECKSUM` bigint(21) unsigned DEFAULT NULL,

`CREATE_OPTIONS` varchar(255) DEFAULT NULL,

`TABLE_COMMENT` varchar(2048) NOT NULLDEFAULT ''

)

ENGINE=MEMORY DEFAULT CHARSET=utf8|

4. Archive存储引擎

Archive存储引擎置只支持INSERT和SELECT操作,支持行锁,但本身并不是事务安全的存储引擎,其最大的优点是其具有较好的压缩比,压缩比一般可达到1:10,可以将同样的数据以更小的磁盘空间占用来存储。

Archive存储引擎非常适合存储归档数据,如历史数据、日志信息数据等等,这类数据往往数据量非常大,并且基本只有INSERT和SELECT操作,使用这个存储引擎可以非常节约磁盘空间。

以某个库里的有2.5亿条记录的历史表为例:

mysql> select TABLE_ROWSfrom TABLES where TABLE_NAME='history';

+------------+

| TABLE_ROWS |

+------------+

|  251755162 |

+------------+

1 row in set (0.01 sec)


原先其默认为InnoDB存储引擎时,该表大小为12G。

mysql> select concat(round(sum(DATA_LENGTH/1024/1024), 2),'MB')as 

data from TABLES where TABLE_NAME='history';

+------------+

| data      |

+------------+

| 12918.88MB |

+------------+

1 row in set (0.00 sec)

当使用Archive存储引擎重建上述表,并且重新插入同样的数据后,该表的大小变为少于2G,可见该存储引起具有很好的压缩比。

其它存储引擎使用较少,这里就不谈了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/c597e2093f3966f9be1d57d43acea4a3.html