Имеет ли значение порядок столбцов в запросе?

При выборе столбцов из таблицы MySQL, ....

Представьте себе таблицу со следующей структурой в PostgreSQL 9.0:

create table raw_fact_table (text varchar(1000));

Для упрощения я упоминаю только один текстовый столбец, на самом деле его дюжина. В этой таблице 10 миллиардов строк, и в каждом столбце много дубликатов. Таблица создается из плоского файла (csv) с помощью COPY FROM.

Чтобы повысить производительность, я хочу преобразовать в следующую структуру звездообразной схемы:

create table dimension_table (id int, text varchar(1000));

Таблица фактов затем будет заменена таблицей фактов, подобной следующей:

create table fact_table (dimension_table_id int);

Мой текущий метод состоит в том, чтобы выполнить следующий запрос для создания таблица измерений:

Create table dimension_table (id int, text varchar(1000), primary key(id));

затем для создания заполните таблицу измерений, которую я использую:

insert into dimension_table (select null, text from raw_fact_table group by text);

После этого мне нужно выполнить следующий запрос:

select id into fact_table from dimension inner join raw_fact_table on (dimension.text = raw_fact_table.text);

Только представьте себе ужасную производительность, которую я получаю, сравнивая все строки со всеми другими строками несколько раз.

В MySQL я мог запустить хранимую процедуру во время COPY FROM. Это может создать хэш строки, и все последующие сравнения строк будут выполняться с хешем, а не с длинной необработанной строкой. Кажется, это невозможно в PostgreSQL, что мне тогда делать?

Образцом данных может быть файл CSV, содержащий что-то вроде этого (я использую кавычки также вокруг целых и двойных чисел):

"lots and lots of text";"3";"1";"2.4";"lots of text";"blabla"
"sometext";"30";"10";"1.0";"lots of text";"blabla"
"somemoretext";"30";"10";"1.0";"lots of text";"fooooooo"
7
задан David 24 January 2011 в 22:39
поделиться