Модераторы: Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Почему не используется индекс при джойне? 
:(
    Опции темы
Barvetal
Дата 6.10.2006, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 181
Регистрация: 31.10.2005

Репутация: нет
Всего: 5



Всем привет!

А задача предельно простая: есть две таблицы. Нужно сделать джойн этих таблиц и вывести первые две результирующие записи. 
Размер этих таблиц - по 140000 записей в каждой. Запрос выполняется 15 секунд. Смотрю по плану - сервер ДБ2 при выполнения джойна не использует индексы (а использует MSJOIN вместо NLJOIN). Не могу понять, почему. Разьясните, пожалуйста, как я могу ускорить работу этого джойна? 

Версия базы - DB2 8.2 (фикспак тот, который месяц назад был последним, это вроде 13-й)

Помогите пожалуйста!

А теперь подробная информация. 

Запрос:

Код

select * from ( 
    select rownumber() over(order by Document.dcm_viewFrom desc) as rownumber_, Document.*, News.*
    from News join Document on News.dcm_unid=Document.dcm_unid) 
as temp_ 
where rownumber_ <= 2


Рисунок плана выполнения запроса находится по ссылке:
план джойна или здесь: план джойна 2

Скрипт создания таблицы Document


Код

CREATE TABLE LIGAOL.DOCUMENT ( 
    DCM_UNID       CHARACTER(32) NOT NULL,
    ENTT_ID        VARCHAR(32),
    DCM_IDENTIFIER    CHARACTER(12) NOT NULL,
    DCM_TITLE      VARCHAR(254),
    DCM_BODY       BLOB(5000000),
    DCM_CREATOR    VARCHAR(62),
    DCM_DATE       TIMESTAMP,
    DCM_TYPE       INTEGER,
    DCM_ISVIEWABLE    SMALLINT,
    DCM_VIEWFROM    TIMESTAMP,
    DCM_VIEWTO     TIMESTAMP,
    DCM_AUTHORS    VARCHAR(126),
    PRIMARY KEY(DCM_UNID)
)
GO
ALTER TABLE LIGAOL.DOCUMENT
    ADD CONSTRAINT CC1160057360992
    UNIQUE (DCM_IDENTIFIER)
GO
ALTER TABLE LIGAOL.DOCUMENT
    ADD CONSTRAINT F_DOC2ENTT
    FOREIGN KEY(ENTT_ID) REFERENCES LIGAOL.ENTITY(ENTT_ID)
GO
CREATE INDEX LIGAOL.DCM_FV_ENID
    ON LIGAOL.DOCUMENT(DCM_VIEWFROM DESC, ENTT_ID)  PCTFREE 10 MINPCTUSED 10
GO
CREATE INDEX LIGAOL.DOC2ENTT_FK
    ON LIGAOL.DOCUMENT(ENTT_ID)
GO


Скрипт создания таблицы NEWS:


Код

CREATE TABLE LIGAOL.NEWS ( 
    DCM_UNID          CHARACTER(32) NOT NULL,
    RBC_ID            INTEGER,
    NWS_TOP           SMALLINT,
    NWS_FIO           VARCHAR(512),
    NWS_ANNOTATION    VARCHAR(2048),
    NWS_LAWESCORT     CLOB(65000),
    NWS_CONTACTINFO    CLOB(16000),
    NWS_SHOWSIGNATURE    SMALLINT,
    NWS_PICTURENAME    VARCHAR(256),
    NWS_ISARCHIVE     SMALLINT,
    PRIMARY KEY(DCM_UNID)
)
GO
ALTER TABLE LIGAOL.NEWS
    ADD CONSTRAINT F_RBC_TO_NWS
    FOREIGN KEY(RBC_ID) REFERENCES LIGAOL.RUBRIC(RBC_ID)
GO
ALTER TABLE LIGAOL.NEWS
    ADD CONSTRAINT FK24FEF311B2BCF5
    FOREIGN KEY(DCM_UNID) REFERENCES LIGAOL.DOCUMENT(DCM_UNID)
GO
CREATE INDEX LIGAOL.RBC_TO_NWS_FK
    ON LIGAOL.NEWS(RBC_ID)
GO


Да, статистика вся построена и актуальна. Вот она:
Статистика индекса по Document.dcm_unid и Статистика индекса по News.dcm_unid
Почему DB2 не использует индекс при джойне?


Всем заранее спасибо!
PM MAIL   Вверх
dvska
Дата 24.1.2007, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 182
Регистрация: 30.1.2006

Репутация: 1
Всего: 9



Попробуй тут http://www.sql.ru/forum/actualtopics.aspx?bid=5 спросить
--------------------
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Другие СУБД | Следующая тема »


 




[ Время генерации скрипта: 0.0701 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.