|
Замена значения на ID
|
|||
---|---|---|---|
#18+
Привет! Пожалуйста, подскажите кто знает. Есть таблица на 8-10 млн. строк, периодически пополняется, такого вида: --------------------------------------------------------------------------------- main_table date, user_id, detail_1, detail_2, detail_3, detail_4, detail_5, country, others_fields 2018-01-01 uuid varchar varchar varchar varchar varchar char(2) ... --------------------------------------------------------------------------------- В ней порядка 150000 уникальных строк по detail(1,2,3,4,5), date В процессе работы приходится выполнять два действия: 1) из detail(1,2,3,4,5) генерить другие колонки по тегам (для дальнейшей раброты) 2) присоединять к таблице дополнительные данные. тоже по колонкам detail(1,2,3,4,5), date. Получается, было бы удобно заменить кучу колонок с текстом на 2 id-шника и сгруппированные данные обработать в отдельных таблицах, потом собрать. Получается нужно сделать примерно так: --------------------------------------------------------------------------------- main_table date, user_id, country, detail_id, detaildate_id, others_fields 2018-01-01 uuid char(2) integer integer ... detail_id detail_1, detail_2, detail_3, detail_4, detail_5, detail_id varchar varchar varchar varchar varchar integer detaildate_id date, detail_1, detail_2, detail_3, detail_4, detail_5, detaildate_id 2018-01-01 varchar varchar varchar varchar varchar integer --------------------------------------------------------------------------------- Посоветуйте каким образом это лучше реализовать. Я рассматривал такие: 1) Сделать дополнительные таблице с уникальными строками, генерить serial. При вставке в main_table получать из них id. - вариант не очень т.к. прийдется в запросе выполнять join по 5+ полям. 2) При вставке в main_table заменять поля сгенерированным uuid. И аналогичным образом заполнять вспомогательные таблицы. Потом join'ить по uuid. Предполагал использовать: uuid_generate_v5(uuid_ns_oid(), (detail_1|| '#' || detail_2||'#'||.......... || detail_5)) - вариант оказался бы идеальным, если uuid_generate_v5 мог быть описан в CREATE TABLE как колонка (аналогично serial). Но такого нет. Может есть варианты лучше? Кажется тема явно должна быть актуальной. Как удобно заменить кучу дублирующихся текстовых полей на id? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2018, 03:23 |
|
|
start [/forum/topic.php?fid=53&msg=39694628&tid=1995613]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
33ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 134ms |
0 / 0 |