技术开发 频道

主流行式数据库评测之开源MySQL5.5版本

   创建外键后的表占用空间。

mysql> system ls -l /user1/mysql_db/tpch2
总计
15625452
-rw-rw---- 1 mysql mysql        8850 06-13 11:03 customer.frm
-rw-rw---- 1 mysql mysql   327155712 06-13 11:04 customer.ibd
-rw-rw---- 1 mysql mysql          65 06-10 15:15 db.opt
-rw-rw---- 1 mysql mysql        9226 06-13 11:20 lineitem.frm
-rw-rw---- 1 mysql mysql 11341398016 06-13 11:51 lineitem.ibd
-rw-rw---- 1 mysql mysql        8692 06-13 11:03 nation.frm
-rw-rw---- 1 mysql mysql      114688 06-13 11:03 nation.ibd
-rw-rw---- 1 mysql mysql        8928 06-11 13:04 orders.frm
-rw-rw---- 1 mysql mysql  2315255808 06-11 13:09 orders.ibd
-rw-rw---- 1 mysql mysql        8874 06-10 16:11 part.frm
-rw-rw---- 1 mysql mysql   335544320 06-10 16:12 part.ibd
-rw-rw---- 1 mysql mysql        8748 06-13 11:06 partsupp.frm
-rw-rw---- 1 mysql mysql  1635778560 06-13 11:08 partsupp.ibd
-rw-rw---- 1 mysql mysql        8648 06-10 16:11 region.frm
-rw-rw---- 1 mysql mysql       98304 06-10 16:11 region.ibd
-rw-rw---- 1 mysql mysql        8804 06-13 11:03 supplier.frm
-rw-rw---- 1 mysql mysql    29360128 06-13 11:04 supplier.ibd

   查看order表的索引,可见外键列上自动创建了索引。

mysql> show index from orders;
+--------+------------+------------+--------------+-------------+-----------+-------------+------------+-
| Table  | Non_unique | Key_name   | Seq_in_index | Column_name | Collation | Cardinality | Index_type |
+--------+------------+------------+--------------+-------------+-----------+-------------+------------+-
| orders |          0 | PRIMARY    |            1 | o_orderkey  | A         |    14928217 | BTREE      |
| orders |          1 | orders_fk1 |            1 | o_custkey   | A         |     2132602 | BTREE      |
+--------+------------+------------+--------------+-------------+-----------+-------------+------------+-
2 rows in set (0.01 sec)

   执行下述命令将表转为压缩格式。可见压缩耗费的时间比较长,比外部文件导入的时间还长得多。每个表的压缩率基本上都是50%,节约空间还是比较明显的。

mysql> set global innodb_file_format=barracuda;
Query OK,
0 rows affected (0.00 sec)

mysql
> alter table nation row_format=compressed;
Query OK,
25 rows affected (0.57 sec)

mysql
> alter table region row_format=compressed;
Query OK,
5 rows affected (0.49 sec)

mysql
> alter table customer row_format=compressed;
Query OK,
1500000 rows affected (1 min 4.93 sec)

mysql
> alter table part row_format=compressed;
Query OK,
2000000 rows affected (45.82 sec)

mysql
> alter table supplier row_format=compressed;
Query OK,
100000 rows affected (5.31 sec)

mysql
> alter table partsupp row_format=compressed;
Query OK,
8000000 rows affected (5 min 48.06 sec)

mysql
> alter table orders row_format=compressed;
Query OK,
15000000 rows affected (23 min 52.25 sec)

mysql
> alter table lineitem row_format=compressed;
Query OK,
59986052 rows affected (1 hour 29 min 45.27 sec)
...

mysql
> system ls -l /user1/mysql_db/tpch2
总计
7841520
-rw-rw---- 1 mysql mysql       8850 06-13 21:18 customer.frm
-rw-rw---- 1 mysql mysql  163577856 06-13 21:19 customer.ibd
-rw-rw---- 1 mysql mysql         65 06-10 15:15 db.opt
-rw-rw---- 1 mysql mysql       9226 06-13 21:50 lineitem.frm
-rw-rw---- 1 mysql mysql 5691670528 06-13 23:21 lineitem.ibd
-rw-rw---- 1 mysql mysql       8692 06-13 21:18 nation.frm
-rw-rw---- 1 mysql mysql      65536 06-13 21:18 nation.ibd
-rw-rw---- 1 mysql mysql       8928 06-13 21:28 orders.frm
-rw-rw---- 1 mysql mysql 1161822208 06-13 21:53 orders.ibd
-rw-rw---- 1 mysql mysql       8874 06-13 21:19 part.frm
-rw-rw---- 1 mysql mysql  167772160 06-13 21:20 part.ibd
-rw-rw---- 1 mysql mysql       8748 06-13 21:21 partsupp.frm
-rw-rw---- 1 mysql mysql  822083584 06-13 21:27 partsupp.ibd
-rw-rw---- 1 mysql mysql       8648 06-13 21:18 region.frm
-rw-rw---- 1 mysql mysql      65536 06-13 21:18 region.ibd
-rw-rw---- 1 mysql mysql       8804 06-13 21:21 supplier.frm
-rw-rw---- 1 mysql mysql   14680064 06-13 21:21 supplier.ibd

   为了比较不同条件下的查询结果,我们进行了4种组合的查询。分别是:共享表空间不压缩,独立表空间不压缩(不创建外键),独立表空间不压缩(创建外键),独立表空间压缩,为了避免查询缓存的影响,用set session query_cache_type = OFF关闭查询缓存。每种测试都在更新统计信息(analyze table)和清空内存(flush tables)后执行2遍,取第2遍的结果。对于个别查询时间过长的查询,如第17、18和20个查询,用人工改写后的写法代替原始的,以获得一个测试时间。

  利用前面第一步产生的查询脚本,执行测试的命令行如下,查询结果输出到不同的log文件,以便于比较:注意在更改表存储和索引类型后,MySQL自动更新了统计信息。

mysql> ANALYZE TABLE nation;
+--------------+---------+----------+----------+
| Table        | Op      | Msg_type | Msg_text |
+--------------+---------+----------+----------+
| tpch2.nation | analyze | status   | OK       |
+--------------+---------+----------+----------+
1 row in set (0.01 sec)

mysql
> show variables like 'query_cache_type';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| query_cache_type | ON    |
+------------------+-------+
1 row in set (0.00 sec)

mysql
> set query_cache_type = OFF;
Query OK,
0 rows affected (0.00 sec)


mysql
> source /root/qall_myf.sql
0
相关文章