3.测试数据和查询语句的产生步骤
主要步骤参照本系列第一篇文章《Oracle 11g R2企业版评测》。然后需要针对PostgreSQL的特性作修改。
PostgreSQLr对SQL语句的特殊要求只有1点:
日期间隔的表达式。不支持interval 'n' year/month等SQL 92写法,要改为interval 'n year'和interval 'n month'。
将修改完成后的22个查询语句保存为mssql_tpch.sql文件。同时在文件开始处加入\timing
以显示SQL运行时间。
4.数据压缩测试
PostgreSQL的压缩功能和其他数据库有所区别。数据库并没有显式的表压缩命令。只有一个TOAST技术与压缩有关。
因为PostgreSQL的页面大小是固定的(通常是8Kb),并且不允许元组跨越多个页面,因此不可能直接存储非常大的字段值。在 PostgreSQL 7.1 之前,代码里有一个硬限制,限制了一个表中一个数据行存储的数据的总大小为刚好略小于一个页面。从版本 7.1 以及以后的版本开始,这个限制被克服了,方法是允许大的字段值被压缩和/或打碎成多个物理行。这些事情对用户都是透明的,只是在后端代码上有一些小的影响。这个技术的简称是TOAST(超尺寸字段存储技术-The Oversized-Attribute Storage Technique)。
TOAST技术只有在变长的且记录长度可能超过1个页面时才会启用,对于tpch测试数据,最长的记录不超过1KB,因此不存在这种可能性。
5.数据查询
由于原始没有添加主键和外键的表执行查询的速度相当慢,比如第2个查询,基本不可能在可接受的时间内获得结果,因此,不进行原始表的测试,只测试添加主键和外键后的结果。由于PostgreSQL在添加外键时并不创建相应列上的索引,而索引对查询影响较大,故分别测试只添加外键和添加外键列上的索引二种情况。
添加主键和外键的步骤如下:
































































尽管创建了主键,还是有2个查询,第17和第20个查询语句无法在可接受的时间内执行完成,为了得到全部查询结果,我们在主键列上创建索引。