我们的应用程序在其中一个env中突然变慢了。我所做的唯一更改就是更改了SQL。在发布之前,SQL类似于
Select EmployeeId
From Employee
Where Dept='CS'
and record_state='ACTIVE'
and EmployeeTypeId ='1'
发布后SQL是
Select EmployeeId
From Employee Where Dept='CS'
and record_state='ACTIVE'
and EmployeeTypeId IN ('1','2')
此表上的索引为employee_state_id_index(部门,记录状态,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')
我们面临的问题的解决方案是重新索引表。该表有1000万条记录,我们最近清理了表中的数据(当我们意识到我们有重复的记录时),这将其减少到几乎是以前记录数量的一半。因此,我们认为我们将尝试重新索引,因为无论如何它都需要它。这有助于:)