2013-02-19 56 views
2

我們的應用程序在其中一個env中突然變慢。我所做的唯一更改是更改SQL。發佈之前,SQL是像此版本的SQLSQL索引與條款

Select EmployeeId 
From Employee 
Where Dept='CS' 
    and record_state='ACTIVE' 
    and EmployeeTypeId ='1' 

Select EmployeeId 
From Employee Where Dept='CS' 
and record_state='ACTIVE' 
and EmployeeTypeId IN ('1','2') 

在此表上的索引是employee_state_id_index(系,record_state,EmployeeTypeId) 該指數沒有發生變化。這個索引不能幫助新的SQL嗎?新的SQL掃描整個表嗎?我不知道索引如何在子句中工作。感謝您的幫助和評論

解釋計劃的查詢

| Id | Operation   | Name      | Rows | Bytes | Cost (%CPU)| 

| 0 | DELETE STATEMENT |       |  1 | 57 |  4 (0)| 
| 1 | DELETE   | Employee     |  |  |   | 
|* 2 | INDEX RANGE SCAN| employee_state_id_index |  1 | 57 |  4 (0)| 
-------------------------------------------------------------------------------- 

Predicate Information (identified by operation id): 


PLAN_TABLE_OUTPUT 


    2 - access("C"."Dept"='CS' AND 
       "C"."RECORD_STATE"='ACTIVE') 
     filter("C"."EmployeeTypeId"='1' OR 
       "C"."EmployeeTypeId"='2') 
+2

檢查執行計劃。它會告訴你究竟是否使用了索引。你也應該告訴我們你正在使用哪個DBMS。甲骨文? Postgres的? – 2013-02-19 10:22:51

+0

你檢查瞭解釋計劃嗎?你可以在這裏爲我們發佈? – Incognito 2013-02-19 10:25:24

+0

我正在使用Oracle 10g – javanerd 2013-02-19 10:29:18

回答

0

解決我們面臨的問題,是重新索引表。該表有1000萬條記錄,我們最近清理了表格中的數據(當我們意識到我們有重複的記錄時),並將其減少到它以前的記錄數量的將近一半。所以我們認爲我們會嘗試重新馴服,因爲無論如何它需要它。這有助於:)