0

我需要获取符合特定条件的记录的文件名,但我意识到执行时查询非常慢。我已经加了index,但是还是很慢,怎么提高性能???我正在使用 DB2。请帮忙,谢谢。

表(文件)(数据量 - 约 100000)

  • FILE_ID
  • 姓名
  • 类别

索引(类别,FILE_ID)

表(记录)(数据量 - 约 50000000)

  • RECORD_ID
  • 数据
  • CREATE_DATE
  • 类型
  • FILE_ID

索引(创建日期,类型,文件 ID)

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

5 回答 5

1

加入应该可以解决您的问题。

有时您还需要重新组织 (REORG) 表和索引以提高慢查询的性能。

于 2013-04-19T16:33:31.263 回答
1

您可能会发现将“表文件”放入带有 where 子句的临时表会加快速度......

例如...

创建一个临时表,然后插入表文件“Where Cateogry =?”中的所有记录 然后将该表加入记录

于 2013-04-22T09:34:17.263 回答
1

加入表格。

select f.name
from f join record r on f.file_id = r.file_id
where f.category = ?
于 2013-04-19T03:18:02.143 回答
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,type)。

于 2013-04-19T03:18:53.150 回答
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 = ?
于 2013-04-19T03:43:08.413 回答