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