我需要获取符合特定条件的记录的文件名,但我发现执行时查询速度非常慢。我已经添加了索引,但它仍然很慢,如何才能提高性能?我正在使用DB2。请帮忙,谢谢。
表格(文件)(数据量 - 约100000)
INDEX(CATEGORY,FILE_ID)
表格(记录)(数据量 - 约50000000)
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 = ? )
答案 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