2013-04-19 3 views
0

Мне нужно получить имя файла с записями, отвечающими определенным критериям, но я понимаю, что при выполнении запроса запрос выполняется очень медленно. Я добавил индекс, но он все еще очень медленный, как можно улучшить производительность ??? Я использую DB2. Пожалуйста, помогите, спасибо.Улучшение производительности SQL-запроса (DB2)

Таблица (FILE) (объем данных - около 100000)

  • file_id
  • ИМЯ
  • КАТЕГОРИЯ

ИНДЕКС (КАТЕГОРИЯ, file_id)

Таблица (ЗАПИСЬ) (Объем данных - около 500000 00)

  • record_id
  • ДАННЫЕ
  • CREATE_DATE
  • ТИП
  • file_id

ИНДЕКС (CREATE_DATE, ТИП, file_id)

SELECT NAME 
FROM FILE 
WHERE CATEGORY = ? AND 
     FILE_ID IN (SELECT FILE_ID FROM RECORD WHERE CREATE_DATE = ? AND TYPE = ?) 
+0

IN медленнее, чем EXISTS, попробуйте использовать EXISTS –

+0

Привет, я протестировал некоторые случаи, и я обнаружил, что производительность IN кажется лучше, чем EXISTS. Это только результаты, которые я нашел, когда проверяю план доступа к запросу. Во всяком случае, просто хочу поделиться своими выводами. – coldholic

ответ

1

Присоединяйтесь к столам.

select f.name 
from f join record r on f.file_id = r.file_id 
where f.category = ? 
1

Попробуйте с INNER JOIN синтаксисом:

select file.name 
    from file inner join record using(file_id) 
where file.category_id=? and record.create_date=? and record.type=? 

с индексом (file_id, create_date, типа) для записи таблицы.

1

это не даст вам дубликат результата

SELECT NAME 
FROM FILE F 
JOIN (
    SELECT FILE_ID FROM RECORD WHERE CREATE_DATE = ? AND TYPE = ? 
    GROUP BY FILE_ID 
) Q ON F.FILE_ID = Q.FILE_ID 
WHERE CATEGORY = ? 
1

когда объединение должно решить проблему.

также иногда вам необходимо реорганизовать (REORG) таблицы и индексы, чтобы повысить производительность при медленных запросах.

+0

Спасибо, реорг улучшает производительность. – coldholic

1

Вы можете обнаружить, что поставив «файл таблицы» в временную таблицу с где положение ускоряет вещи ...

например ...

создать временную таблицу, а затем вставить все записи из таблицы Файл "Where Cateogry =?" а затем присоедините эту таблицу к записи

Смежные вопросы