помогите решить задачку, пожалуйста
Sweta
Дата: 09.08.2005 13:56:40
Господа, очень нужна помощь(срочно, а то меня коллеги съедят). Oracle 9.0.2 под Windows
Есть таблица tp(на данный момент примерно 25 тысяч записей), есть таблица pol (на данный момент примерно 70 миллионов записей, в ней примерно 20 полей, для решения задачи нужны pol_id, bron, urn ) (обе партиционированные, каждый месяц туда заливаются по соответственно 25 тысяч-80 миллионов). Таблица связaны по tp_id, который встречается в pol(но в pol присутствуют примерно 20 тысяч tp_id, т.е. не все).
Нужно создать копию таблицы tp(назовем ее agr), со всеми полями из tp, и еще нужно создать еще несколько полей, в которых нужно для каждого tp_id посчитать количество distinct pol_id по определенным bron, и еще несколько полей, в которых нужно для каждого tp_id посчитать количество distinct urn по определенным bron(условие, вообще-то сложнее, там еще и несколько дат нужно учитывать). Этот скрипт нужно будет использовать каждый раз при заливке таблиц.
Создала индексы по tp_id и bron дальше не знаю, как подступиться. Кто мне поможет с решением? Буду очень благодарна.
з.ы. Сама торможу, мой инсерт отрабатывает задачу за полтора часа, коллеги едят поедом.
softy
Дата: 09.08.2005 13:58:49
Хинт /*+ APPEND */ используешь?
Vint
Дата: 09.08.2005 14:00:56
Если я правильно понял задачу вам нужно посчитать количество различных значений поля bron для каждого pol_id:
select pol_id, count(distinct bron) from pol
group by pol_id |
Если нет то уточните задачу пожалуйста
Sweta
Дата: 09.08.2005 14:01:20
пока нет. Спасибо за идею.
Oleg Afanasiev
Дата: 09.08.2005 14:02:03
softbuilder@inbox.ru |
Хинт /*+ APPEND */ используешь? |
Тогда стОит и про nologging упомянуть
softy
Дата: 09.08.2005 14:11:42
Oleg Afanasiev |
softbuilder@inbox.ru | Хинт /*+ APPEND */ используешь? |
Тогда стОит и про nologging упомянуть |
Не совсем одного поля (ягода) оптимизация.
Sweta
Дата: 09.08.2005 14:14:30
Ребята, мне надо
insert into agr select a.tp_id, a.pole2, a.pole 3, a.pole 4, a.pole5 .... a.pole20, count distinct b.tp_id count_a from tp a, pol b
а дальше я торможу, потому как нужно добавать left outer join(не все tp_id из tp присутствуют в pol (в этом случае, понятно дело, должен быть 0), кроме того, эта выборка дожна быть еще и по разным bron (вроде where bron='RBS' для одного из аггрегатных полей, 'RSL' для другого, 'RTS' для тертьего и т.д.)
Ситауция осложняется большим количеством записей таблицах
Я хотела сначала залить agr исходной tp, и в качестве defaulta вставить нули, а потом update table и т.д. по частям. Не думаю, что это правильное решение.
Sweta
Дата: 09.08.2005 14:17:35
з.ы. коллеги у меня живут по принципу "человек человеку волк", к сожалению.
Oleg Afanasiev
Дата: 09.08.2005 14:31:06
softbuilder@inbox.ru |
Oleg Afanasiev | softbuilder@inbox.ru | Хинт /*+ APPEND */ используешь? |
Тогда стОит и про nologging упомянуть |
Не совсем одного поля (ягода) оптимизация. |
ты хочешь добавлять даннные в новые экстенты
я ещё к этому хочу отключить логирование.
softy
Дата: 09.08.2005 14:53:23
Я не спорю что это тоже может помочь.
Просто слово "тогда" - не совсем уместно.
P.S.
А разве /*+ APPEND */ означает имненно вставку в новые экстенты?