Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.18;
Скачать: CL | DM;

Вниз

увеличение скорости удаления данных   Найти похожие ветки 

 
alsov ©   (2006-12-19 09:58) [0]

Приветствую, Мастера

Помогите пожалуйста увеличить скорость уделения данных из таблиц.

Есть примерно такие 2 таблицы


CREATE TABLE m_user (
 user_id NUMBER(10) NOT NULL PRIMARY KEY,
 start_date DATE NULL,
 finish_date DATE NULL
)
/

CREATE TABLE m_user_value (
 user_id NUMBER(10) NOT NULL,
 param_id NUMBER(10) NOT NULL,
 param_value number NOT NULL
)
/

ALTER TABLE m_user_value
 ADD CONSTRAINT pk_m_user_value PRIMARY KEY (
   param_id,
   user_id
 )
/  

ALTER TABLE m_user_value
 ADD CONSTRAINT FK_m_user_value_m_user FOREIGN KEY (user_id)
 REFERENCES m_user (user_id)
/


В таблице m_user около 2 миллионов записей, в m_user_value около 4-х.

Нужно удалить из них данные, при которых удалиться около половины записей m_user и соответственно их значений из m_user_value.

Делаю так

DELETE
 FROM m_user_value
WHERE user_id IN (SELECT user_id FROM m_user WHERE start_date > To_Date("01012001", "ddmmyyyy"));

DELETE
 FROM m_user
WHERE start_date > To_Date("01012001", "ddmmyyyy");


При этом запросы выполняются около 4-х часов (пень4 2,4 + гектар оперативы ора10g).

Возможно ли как-либо ускорить этот процесс? Индексы например поотключать или еще чего.


 
Ega23 ©   (2006-12-19 10:00) [1]

Я бы попробовал наложить на свяску директиву On Delete Cascade
Ну и индексы поотключать - тоже можно попробовать.


 
alsov ©   (2006-12-19 10:09) [2]


> Я бы попробовал наложить на свяску директиву On Delete Cascade

А это как? Вы имеете в виду в констрейне?


 
Кщд ©   (2006-12-19 10:12) [3]

при таких %%-ом содержании удаляемых и нечастой необходимости операции
create table tmp as select * from  m_user where...;
truncate table m_user;
insert into m_user (select * from tmp);
drop table tmp;

скорректировать с учетом constraint m_user_value


 
Кщд ©   (2006-12-19 10:15) [4]

alsov ©   (19.12.06 10:09) [2]

нечто типа:
alter table m_user_value
 add constraint FK_m_user_value_m_user foreign key (user_id)
 references m_user(user_id) on delete cascade


 
Desdechado ©   (2006-12-19 10:46) [5]

Если такое часто приходится делать, то имеет смысл секционировать таблицу PARTITION BY RANGE( start_date ).
Секции удаляются быстрее в разы.


 
alsov ©   (2006-12-19 11:20) [6]


> Если такое часто приходится делать, то имеет смысл секционировать
> таблицу PARTITION BY RANGE( start_date ).


Делается не часто.


> create table tmp as select * from  m_user where...;truncate
> table m_user;insert into m_user (select * from tmp);drop
> table tmp;скорректировать с учетом constraint m_user_value


Попробую


 
alsov ©   (2006-12-19 12:30) [7]

сделал так
есть возможность сделать флаг пометки на удаление и удалять по нему
в результате получилось

DELETE
FROM m_user_value
WHERE flag="1";

DELETE
FROM m_user
WHERE flag="1";


 
alsov ©   (2006-12-19 12:32) [8]

всем спасибо



Страницы: 1 вся ветка

Текущий архив: 2007.03.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.065 c
2-1172207214
VitAngel
2007-02-23 08:06
2007.03.18
Сканирование директории


2-1172498747
Danila_master
2007-02-26 17:05
2007.03.18
Несколько модулей в одном проекте.


2-1172267824
arccis
2007-02-24 00:57
2007.03.18
закрытие и автозагрузка


1-1169717444
Альф
2007-01-25 12:30
2007.03.18
Обработка исключений в TThread


15-1171746781
Цукор5
2007-02-18 00:13
2007.03.18
мать(440BX) с винтом на 40G...