【发布时间】:2011-11-13 11:51:14
【问题描述】:
我在 SQL 中编写了一个查询,从表中选择一些列。我的问题是,当我在 Oracle 10g 中执行此查询时,大约需要 7 秒,但下一次它会在几毫秒内执行。如果我更改了 where 子句,再次花费了 5 秒以上。 第一次如何加快这个查询?查询是这样的:
SELECT Id,Qflag, LetterId, LetterNo, LetterDate, InstanceDate, ViewDate, DeadlineDate
FROM VWLETTERINSTANCESEARCH
WHERE ( QFLAG IS NULL OR QFLAG = 0 ) AND
EXISTS(SELECT * FROM VWLETTERINSTANCESEARCH VW
where PARENTINSTANCEID=VWLETTERINSTANCESEARCH.Id AND refSenderId=1947)AND
EXISTS(SELECT * FROM LetterInstances ChildInstance, Folders
WHERE ChildInstance.ParentInstanceId=VWLETTERINSTANCESEARCH.Id AND
ChildInstance.FolderId=Folders.Id AND Folders.OwnerId=23) AND
OwnerId IN (SELECT StaffId FROM vwStaffUsers WHERE UserId=2 AND Deleted=0)
【问题讨论】:
-
用
explain plan怎么样? -
我没用过,也不知道这是干什么用的。
-
看看吧。它将帮助您更好地了解将在服务器上运行的 hoy 查询。
-
感谢您的建议
-
@God Lover:请不要大喊大叫。您将唤醒 DBMS 和 DBA。