在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
数据魔方需要的数据,一旦写入就很少或者根本不会更新。这种数据非常适合压缩以降低磁盘占用。MySQL本身提供了两种压缩方式―― 1. 测试环境1.1 软硬件
|
比较项 | 磁盘空间 | 耗时(秒) | CPU Idle | LOAD | 并发 |
基准表(MyISAM) | 403956004 | 2.308 | 30 | 15 | 50 |
ARCHIVE | 75630745 | >300 | 75 | 4 | 1 |
PACK | 99302109 | 2.596 | 30 | 22 | 50 |
根据上面的表格给出的测试数据,我们简单得出以下结论:
Archive
表占用空间约为之前的18.7%
,myisampack
后空间占用约为之前的24.6%;二者相差不多,单纯从空间利用情况来看,我们似乎需要选择archive
表;pack
表查询性能与基准表相当; 而archive
表在单并发情况下耗时超过了5分钟 (实在等不了了,kill之)!那么,我们似乎可以得出结论,针对需要在线查询的表,ARCHIVE
引擎基本上可以不考虑了。
为什么这个测试过程中ARCHIVE
引擎如此地慢呢?
我们知道,mysql
提供archive
这种存储引擎是为了降低磁盘开销,但还有一个前提,那就是被归档的数据不需要或者很少被在线查询,偶尔的查询慢一些也是没关系的。鉴于上述原因,archive
表是不允许建立自增列之外的索引的。
有了这个共识,我们拿一条测试SQL来分析一下不用索引前后的查询性能差别为什么这么大。
在我们的测试SQL中有这么一条:
SELECT c1,c2,...,cn FROM mysqlslap.rpt_topranks_v3 WHERE ... AND partition_by1 = '50008090' ORDER BY added_quantity3 DESC LIMIT 500
我们前边说过,测试的这个表在partition_by1
这个字段上建立了索引,那么,我们初步判断在基准表和myisampack
表上,这个查询应该用到了partition_by1
的索引; EXPLAIN 一下:
mysql> EXPLAIN -> SELECT ... FROM mysqlslap.rpt_topranks_v3 -> WHERE ... AND partition_by1 = '50008090' -> ORDER BY added_quantity3 DESC -> LIMIT 500\G *************************** 1. row *************************** id: 1 select_type: SIMPLE TABLE: rpt_topranks_v3 type: ref possible_keys: idx_toprank_pid,idx_toprank_chg KEY: idx_toprank_pid key_len: 99 ref: const rows: 2477 Extra: USING WHERE; USING filesort 1 row IN SET (0.00 sec)
正如我们所料,这个查询用到了建立在partition_by1
这个字段上的索引,匹配的目标行数为2477,然后还有一个在added_quantity3
字段上的排序。由于added_quantity3
没有索引,所以用到了filesort
。
我们再看一下这条SQL在归档表上的 EXPLAIN 结果:
mysql> EXPLAIN -> SELECT ... FROM mysqlslap.rpt_topranks_v3_<strong>archive</strong> -> WHERE ... AND partition_by1 = '50008090' -> ORDER BY added_quantity3 DESC -> LIMIT 500\G *************************** 1. row *************************** id: 1 select_type: SIMPLE TABLE: rpt_topranks_v3_archive type: ALL possible_keys: NULL KEY: NULL key_len: NULL ref: NULL rows: 2424753 Extra: USING WHERE; USING filesort 1 row IN SET (0.00 sec)
EXPLAIN 说:“我没有索引可用,所以只能全表扫描2424753行记录,然后再来个filesort
。”你要追求性能,那显然是委屈MySQL
了。
到此这篇关于mysql的数据压缩性能对比详情的文章就介绍到这了,更多相关mysql的数据压缩性能对比内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界!
请发表评论