2014-04-27 72 views
0

我是oracle數據庫的新用戶,我正在嘗試一些實驗。如何有效改善以下更新查詢以及爲什麼不應該使用我的查詢(oracle)?

我寫了下面的查詢更新。

我們是否可以改進此查詢。

我問我的老年人關於這個查詢,他們說這個查詢在數據很大的時候會慢一點。

所以,我想了解並得到一些信息,爲什麼這個查詢更慢,以及如何改進。

UPDATE EMP_COMPANY C1 
SET SALARY = (SELECT 1.5 * AVG(C2.SALARY) 
       FROM EMP_COMPANY 
       WHERE C2.CNAME = C1.CNAME) 
+1

查詢書面會崩潰,因爲C2是不確定的。但是,這是一個小問題。至於改進邏輯,如果名稱不是一個唯一的標識符,你可能不會得到你想要的結果。戈登的回答解決了績效問題。 –

回答

0

正如您所寫,您的查詢對於Oracle來說相當合理。您可以通過EMP_COMPANY(CNAME, SALARY)上的索引來改善它。此索引「覆蓋」子查詢,因此數據頁不需要用於子查詢。

該操作似乎有點奇怪 - 在公司內部設置了一堆薪水。但那是另一回事。

編輯:

您的查詢缺少c2別名,所以我覺得你的意思是:

UPDATE EMP_COMPANY C1 
SET SALARY = (SELECT 1.5 * AVG(C2.SALARY) 
       FROM EMP_COMPANY C2 
       WHERE C2.CNAME = C1.CNAME);