select (sysdate - EVENTSTARTTIME) D
from (SELECT EVENTSTARTTIME
FROM tblWIPEquipStatusLog
Where MainStatusNo in (1, 5, 8, 9)
ORDER BY EVENTSTARTTIME DESC)
where rownum = 1tblWIPEquipStatusLog表有100M以上,查詢速度很慢。
請問此sql能不能優化,提高查詢效率。
from (SELECT EVENTSTARTTIME
FROM tblWIPEquipStatusLog
Where MainStatusNo in (1, 5, 8, 9)
ORDER BY EVENTSTARTTIME DESC)
where rownum = 1tblWIPEquipStatusLog表有100M以上,查詢速度很慢。
請問此sql能不能優化,提高查詢效率。
from (SELECT MAX(EVENTSTARTTIME) EVENTSTARTTIME
FROM tblWIPEquipStatusLog
Where MainStatusNo in (1, 5, 8, 9)
--ORDER BY EVENTSTARTTIME DESC
)
where rownum = 1
from (SELECT EVENTSTARTTIME
FROM tblWIPEquipStatusLog
Where MainStatusNo in (1, 5, 8, 9)
) b
where rownum = 1 ORDER BY b.EVENTSTARTTIME DESC
先找出来后在排序
SELECT SYSDATE-MAX(EVENTSTARTTIME) EVENTSTARTTIME
FROM tblWIPEquipStatusLog
Where MainStatusNo in (1, 5, 8, 9)
另外,100M的数据是否要分区还要根据服务器资源的实际情况来定,我们系统一些表都2个G了,也没使用分区表。
select (sysdate - EVENTSTARTTIME) D
from (SELECT MAX(EVENTSTARTTIME) EVENTSTARTTIME
FROM tblWIPEquipStatusLog
Where MainStatusNo in (1, 5, 8, 9)
--ORDER BY EVENTSTARTTIME DESC
)
where rownum = 1
的確在速度方面有點提升。
select (sysdate - b.EVENTSTARTTIME) D
from (SELECT EVENTSTARTTIME
FROM tblWIPEquipStatusLog
Where MainStatusNo in (1, 5, 8, 9)
) b
where rownum = 1 ORDER BY b.EVENTSTARTTIME DESC
則取出的不是想要的數據。索引方面,不是很清楚。在公司沒有聽他們說用過。(DB管理DB,開發做開發)
看到大家的回帖,深受啟發。謝謝!