2013-02-19 54 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万条记录,我们最近清理了表格中的数据(当我们意识到我们有重复的记录时),并将其减少到它以前的记录数量的将近一半。所以我们认为我们会尝试重新驯服,因为无论如何它需要它。这有助于:)