技术开发 频道

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

  5.数据查询

  由于原始tpch脚本dss.ri中创建外键的语法不符合MySQL的格式要求,需要把引用表的列名也列举出来,同时,MySQL默认对表名大小写敏感,也要做相应的修改。为了便于在执行计划中辨认主键,对主键约束也采取命名方式。

-- 添加主键
alter table region add constraint region_pk primary key (r_regionkey);

alter table nation add constraint nation_pk primary key (n_nationkey);

alter table part add constraint part_pk primary key (p_partkey);

alter table partsupp add constraint partsupp_pk primary key (ps_partkey,ps_suppkey);

alter table customer add constraint customer_pk primary key (c_custkey);

alter table orders add constraint orders_pk primary key (o_orderkey);

alter table lineitem add constraint lineitem_pk primary key (l_orderkey,l_linenumber);

alter table supplier add constraint supplier_pk primary key (s_suppkey);

-- 添加外键
alter table nation add constraint nation_fk1 foreign key (n_regionkey) references region(r_regionkey);

alter table supplier add constraint supplier_fk1 foreign key  (s_nationkey) references nation(n_nationkey);

alter table customer add constraint customer_fk1 foreign key  (c_nationkey) references nation(n_nationkey);

alter table partsupp add constraint partsupp_fk1 foreign key  (ps_suppkey) references supplier(s_suppkey);

alter table partsupp add constraint partsupp_fk2 foreign key (ps_partkey) references part (p_partkey);

alter table orders add constraint orders_fk1 foreign key  (o_custkey) references customer (c_custkey);

alter table lineitem add constraint lineitem_fk1 foreign key (l_orderkey)  references orders (o_orderkey);

alter table lineitem add constraint lineitem_fk2 foreign key (l_partkey,l_suppkey) references partsupp(ps_partkey,ps_suppkey);

   由于原始没有添加主键和外键的表执行查询的速度相当慢,比如第2个查询,基本不可能在可接受的时间内获得结果,因此,不进行原始表的测试,只测试添加主键和外键后的结果,同时测试所有表共享存储在单个表空间和每个表单独表空间的情况。鉴于MySQL在添加外键时同时创建了相应列上的索引,对查询影响较大,故分别测试只添加主键和添加主键和外键二种情况。

  Innodb创建的主键是聚集主键,增加的空间非常少,甚至占用的空间比增加主键前的原始表还略有减少,这与它的索引存储和数据在一起有关。创建外键的同时,MySQL检查外键所在列是否有索引,如果没有,则自动创建索引,这与其他数据库的外键约束有所不同,因此创建外键后,表占用空间增加了。

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

[root@redflag11012501 tpch2]# ll
总计
12760564
-rw-rw---- 1 mysql mysql       8850 06-10 16:16 customer.frm
-rw-rw---- 1 mysql mysql  301989888 06-10 16:16 customer.ibd
-rw-rw---- 1 mysql mysql         65 06-10 15:15 db.opt
-rw-rw---- 1 mysql mysql       9226 06-10 16:28 lineitem.frm
-rw-rw---- 1 mysql mysql 8959033344 06-10 16:47 lineitem.ibd
-rw-rw---- 1 mysql mysql       8692 06-10 16:11 nation.frm
-rw-rw---- 1 mysql mysql      98304 06-10 16:11 nation.ibd
-rw-rw---- 1 mysql mysql       8928 06-10 16:23 orders.frm
-rw-rw---- 1 mysql mysql 2000683008 06-10 16:27 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-10 16:17 partsupp.frm
-rw-rw---- 1 mysql mysql 1430257664 06-10 16:20 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-10 16:17 supplier.frm
-rw-rw---- 1 mysql mysql   26214400 06-10 16:17 supplier.ibd
0
相关文章