Оптимизация удаления с запросом
Добавлено: 22 мар 2005, 19:37
Привет All
Возникла проблемка , есть связка мастер-детейл
, проблема удаления из детейл ,можна ли как то оптимизировать ,
нуно выполнить
В мастере милион записей в детейле 3 милиона
delete from inout io where io.pid in
(select id from invoices i where i.the_date<'01.01.2004' )
пробывал и так
delete from inout io where io.pid in
(select id from invoices i where i.the_date<'01.01.2004' and io.pid=i.id)
и через екзист пробывал .
мастер
Возникла проблемка , есть связка мастер-детейл
, проблема удаления из детейл ,можна ли как то оптимизировать ,
нуно выполнить
В мастере милион записей в детейле 3 милиона
delete from inout io where io.pid in
(select id from invoices i where i.the_date<'01.01.2004' )
пробывал и так
delete from inout io where io.pid in
(select id from invoices i where i.the_date<'01.01.2004' and io.pid=i.id)
и через екзист пробывал .
мастер
Код: Выделить всё
CREATE DOMAIN IDN AS
INTEGER
NOT NULL
CREATE DOMAIN MNY AS
NUMERIC(16,4)
CREATE DOMAIN NAMEN AS
VARCHAR(20) CHARACTER SET NONE
NOT NULL
COLLATE NONE
CREATE TABLE INVOICES (
ID IDN /* INTEGER NOT NULL */,
FROM_ID IDN /* INTEGER NOT NULL */,
TO_ID IDN /* INTEGER NOT NULL */,
DOC_TYPE SMALLINT NOT NULL,
THE_DATE DATE,
INTERVAL_ID SMALLINT NOT NULL,
DOC_SUM MNY /* NUMERIC(16,4) */ DEFAULT 0,
CURRENCY_ID SMALLINT NOT NULL,
CURRENCY_VALUE MNYN /* NUMERIC(16,4) NOT NULL */ NOT NULL,
DSC VARCHAR(200),
FIRM_ID SMALLINT NOT NULL,
DOC_NO VARCHAR(10),
USER_ID INTEGER NOT NULL,
RESPONSIBLE_ID INTEGER
);
CREATE INDEX INVOICES_IDX1 ON INVOICES (FROM_ID);
CREATE INDEX INVOICES_IDX2 ON INVOICES (TO_ID);
CREATE INDEX INVOICES_IDX3 ON INVOICES (THE_DATE);
CREATE UNIQUE INDEX RDB$PRIMARY23 ON INVOICES (ID);
ALTER INDEX RDB$PRIMARY23 INACTIVE;
детейл
CREATE TABLE INOUT (
ID IDN /* INTEGER NOT NULL */,
PID IDN /* INTEGER NOT NULL */,
GOOD_ID IDN /* INTEGER NOT NULL */,
PART_ID INTEGER,
QTY MNYN /* NUMERIC(16,4) NOT NULL */,
PRC MNYN /* NUMERIC(16,4) NOT NULL */,
FULLPRC MNY /* NUMERIC(16,4) */,
DISCOUNT MNY /* NUMERIC(16,4) */,
GOOD_DSC VARCHAR(24),
PACKID INTEGER,
PRINT_COUNT INTEGER default 0
);
CREATE INDEX INOUT_IDX1 ON INOUT (PID);
CREATE INDEX INOUT_IDX2 ON INOUT (GOOD_ID);
CREATE UNIQUE INDEX RDB$PRIMARY21 ON INOUT (ID);
ALTER INDEX RDB$PRIMARY21 INACTIVE;