2015-07-02 25 views
0

我有以下查詢,我想刪除管理部門中的3名員工。不同的查詢或一個?哪一個是可行的?

Delete from Employee_tbl where emp_Id = 123 and emp_dep = 'Admin'; 
Delete from Employee_tbl where emp_Id = 456 and emp_dep = 'Admin'; 
Delete from Employee_tbl where emp_Id = 789 and emp_dep = 'Admin'; 

我想編寫一個查詢這個喜歡 -

Delete from Employee_tbl where emp_Id in (123, 456, 789) and emp_dep = 'Admin'; 

這是寫在性能和所有的情況下,該查詢正確的方法是什麼?我很困惑。

任何解釋將不勝感激。

+0

第二個選項更好,因爲你只打了一次桌子 – Mihai

回答

1

兩個詢問有自己的優點和缺點

1)多進行選擇。

我寧願用綁定變量重寫查詢。

Delete from Employee_tbl where emp_Id = :l_emp_id and emp_dep = :l_emp_dep; 

並運行多次。

這樣,oracle不會每次都難以解析查詢,Oracle會重新使用解釋計劃,以減少共享全局區域(SGA)中的鎖存活動,從而最大限度地降低CPU使用率。

Bind variables - The key to application performance

但這裏是一個小故障的更多詳細信息,查詢的每個執行實際,需要從客戶端切換到SQL引擎進程。(上下文切換,這又是一個昂貴的過程)

爲了覆蓋這個,我們使用bulk binding。但並非所有客戶都支持這一點。

2)使用IN或Temp表/ CTE的單個查詢。

此查詢取決於DB intelligence本身。這對開發人員來說是不智慧的。最近的優化器巧妙地處理它們,通過內部使用IN-list iterators或臨時表(如果需要)。

其他優點是,您只需運行一次查詢,操作只需要一次往返數據庫。

讓數據庫決定負載。

+0

非常有用的信息!謝謝!! –

相關問題