如何在tuplesort.c的多相合并算法中达到D5?

时间:2014-07-19 00:25:58

标签: sql algorithm postgresql

为了研究tuplesort.c的多相合并算法,我使用ddd和apend一个表,其架构如下:

CREATE TABLE Towns (
    id SERIAL UNIQUE NOT NULL,
    code VARCHAR(10) NOT NULL, -- Only unique inside a department
    article TEXT,
    name TEXT NOT NULL, -- Names are not really unique, for instance 'Sainte-Croix'
    department VARCHAR(4) NOT NULL REFERENCES Departments (code),
    UNIQUE (code, department)
    -- UNIQUE (name, department) -- Not perfectly unique but almost
);

并且有36684条记录,每条记录都像:

id          code  article  name      department

31800       266    \N    Machault    77

并且为了进入外部排序,我输入以下命令:

select * from towns order by name desc;

但是我发现在排序过程中不需要达到D5和D6,我认为原因是在合并之前运行量是3(太小),为了生成更多的运行,我在输入它们时拖拽了记录并获得了同样的结果。

所以我想要一些帮助,我到达D5和D6最不需要什么模式和记录?任何建议将不胜感激!

狄龙

1 个答案:

答案 0 :(得分:1)

将一个非常低的值设置为work_mem以使其内存不足

set work_mem = 64;

64 KB是9.3中的最小值。您可能需要获取更大的数据样本

http://www.postgresql.org/docs/current/static/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-MEMORY