提高SQL查询的性能(DB2)

时间:2013-04-19 03:06:13

标签: sql performance indexing db2

我需要获取符合特定条件的记录的文件名,但我发现执行时查询速度非常慢。我已经添加了索引,但它仍然很慢,如何才能提高性能?我正在使用DB2。请帮忙,谢谢。

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

  • FILE_ID
  • NAME
  • CATEGORY

INDEX(CATEGORY,FILE_ID)

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

  • RECORD_ID
  • DATA
  • CREATE_DATE
  • TYPE
  • FILE_ID

INDEX(CREATE_DATE,TYPE,FILE_ID)

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

5 个答案:

答案 0 :(得分:1)

加入表格。

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

答案 1 :(得分: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)作为记录表。

答案 2 :(得分: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 = ?

答案 3 :(得分:1)

加入应解决您的问题。

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

答案 4 :(得分:1)

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

...例如

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