我在DB2 .This表中有一个名为'ASSETINFO‘的表,有300万条记录。我想要从表中获取基于'Asset范围‘的记录,因此我在Id列的同一表上应用了内部联接。目前,该表有202964行,但运行时间超过20分钟。我尝试了下面的查询,即使这需要超过15分钟。
SELECT count(*)
FROM AI
INNER JOIN AI AI2
ON AI2.ASSET_ID = AI.ASSET_ID
WHERE AI2.ASSET_ID = 123;
我的问题是:
select AI.ASSET_ID,
AI.ASSET_NAME,
AI.ASSET_START_PRIZE,
AI.ASSET_END_PRICE,
AI3.ASSET_START_PRIZE,
AI3.ASSET_END_PRICE,
AI.ASSET_AREA_CODE
FROM ASSETINFO AI
INNER JOIN
( SELECT
AI2.ASSET_ID,
AI2.ASSET_NAME,
AI2.ASSET_START_PRIZE,
AI2.ASSET_END_PRICE,
AI2.ASSET_AREA_CODE
FROM ASSETINFO AI2
WHERE AI2.ASSET_ID=123
GROUP BY
AI2.ASSET_ID,
AI2.ASSET_NAME,
AI2.ASSET_START_PRIZE,
AI2.ASSET_END_PRICE,
AT2.ASSET_AREA_CODE
) AI2
ON AI3.ASSET_ID = AI.ASSET_ID,
AND AI3.ASSET_AREA_CODE = AI.ASSET_AREA_CODE
AND AI.ASSET_START_PRIZE > AI3.ASSET_START_PRIZE
AND AI.ASSET_END_PRICE < AI3.ASSET_END_PRICE
WHERE AI.ASSET_ID=123
GROUP BY
AI3.ASSET_ID,
AI3.ASSET_NAME,
AI3.ASSET_START_PRIZE,
AI3.ASSET_END_PRICE,
AI3.ASSET_AREA_CODE
ORDER BY
AI3.ASSET_ID, AI3.ASSET_NAME;
请建议,如果在上述情况下,我如何减少时间?我是否需要使用索引,如果是的话,哪个索引对我的情况是有用的?
发布于 2016-10-11 20:25:27
如果这需要15分钟,那么事情就不对劲了。
ASSET_ID被索引了吗?
你最近有没有分割索引?
SELECT count(*)
FROM AI
INNER JOIN AI AI2
ON AI2.ASSET_ID = AI.ASSET_ID
WHERE AI2.ASSET_ID = 123;
https://dba.stackexchange.com/questions/152002
复制相似问题