index PK_SKLAD_NUMBERS cannot be used in the specified plan.
Добавлено: 06 апр 2005, 18:57
Чем первичный ключ не индекс?
Ну очень долго выполняется.
По анализу производительности в ИБЭксперте вижу кучу ненужных чтений из SKLAD_NUMBERS
я так понимаю потому что используется в плане SKLAD_NUMBERS_IDX1
пытаюсь прописать там первичный ключ PK_SKLAD_NUMBERS
на что получаю
index PK_SKLAD_NUMBERS cannot be used in the specified plan.
Что не так?
С планами никогда не работал раньше.
Помогите оптимизировать запрос
Код: Выделить всё
SELECT
ORIGINAL_NUMBERS.ID_ON,
ORIGINAL_NUMBERS.ON_CLEAR,
ORIGINAL_NUMBERS.ON_NAME,
ORIGINAL_NUMBERS.DET_LIST_ID,
BOOK_ORIGINAL_FIRM_LIST.OF_NAME,
SKLAD_NUMBERS.DIRTY_COD,
BOOK_MAKERS.MAKER_NAME
FROM ORIGINAL_NUMBERS
INNER JOIN BOOK_ORIGINAL_FIRM_LIST ON (ORIGINAL_NUMBERS.OFL_ID = BOOK_ORIGINAL_FIRM_LIST.ID_OFL)
INNER JOIN SKLAD_NUMBERS ON (SKLAD_NUMBERS.ID_DET_LIST = ORIGINAL_NUMBERS.DET_LIST_ID)
INNER JOIN BOOK_MAKERS ON (BOOK_MAKERS.ID_MAKERS = SKLAD_NUMBERS.Maker_id)
where ORIGINAL_NUMBERS.On_clear like '7700%'
План
PLAN JOIN (BOOK_MAKERS NATURAL,SKLAD_NUMBERS INDEX (SKLAD_NUMBERS_IDX1),ORIGINAL_NUMBERS INDEX (ORIGINAL_NUMBERS_IDX1,DETLIST_IDX),BOOK_ORIGINAL_FIRM_LIST INDEX (PK_BOOK_ORIGINAL_FIRM_LIST))
Адаптированный план
PLAN JOIN (BOOK_MAKERS NATURAL,SKLAD_NUMBERS INDEX (SKLAD_NUMBERS_IDX1),ORIGINAL_NUMBERS INDEX (ORIGINAL_NUMBERS_IDX1,DETLIST_IDX),BOOK_ORIGINAL_FIRM_LIST INDEX (PK_BOOK_ORIGINAL_FIRM_LIST))
По анализу производительности в ИБЭксперте вижу кучу ненужных чтений из SKLAD_NUMBERS
Код: Выделить всё
CREATE TABLE SKLAD_NUMBERS (
ID_DET_LIST INTEGER NOT NULL,
CLEAR_COD VARCHAR(30),
DIRTY_COD VARCHAR(30) NOT NULL,
MAKER_ID INTEGER,
CATEGORY_ID INTEGER,
GROUP_ID INTEGER,
***************
);
ALTER TABLE SKLAD_NUMBERS ADD CONSTRAINT PK_SKLAD_NUMBERS PRIMARY KEY (ID_DET_LIST);
CREATE INDEX SKLAD_NUMBERS_IDX1 ON SKLAD_NUMBERS (MAKER_ID, CLEAR_COD);
CREATE INDEX SN_NUM_MAK_IDX ON SKLAD_NUMBERS (CLEAR_COD, MAKER_ID);
CREATE TABLE BOOK_MAKERS (
ID_MAKERS INTEGER NOT NULL,
MAKER_NAME TFIRMA NOT NULL /* TFIRMA = VARCHAR(30) */
);
ALTER TABLE BOOK_MAKERS ADD CONSTRAINT PK_BOOK_MAKERS PRIMARY KEY (ID_MAKERS);
CREATE UNIQUE INDEX BOOK_MAKNAMES_IDX ON BOOK_MAKERS (MAKER_NAME);
пытаюсь прописать там первичный ключ PK_SKLAD_NUMBERS
на что получаю
index PK_SKLAD_NUMBERS cannot be used in the specified plan.
Что не так?
С планами никогда не работал раньше.
Помогите оптимизировать запрос