3

環境の 1 つでアプリケーションが突然遅くなりました。私が行った唯一の変更は、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 (Dept,record_state,EmployeeTypeId ) です。インデックスは変更されていません。このインデックスは新しい SQL に役立ちませんか? 新しい SQL はテーブル全体をスキャンしますか? インデックスが in 句でどのように機能するかわかりません。あなたの助けとコメントに感謝します

クエリの説明計画は次のとおりです。

| 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')
4

1 に答える 1

0

私たちが直面した問題の解決策は、テーブルのインデックスを再作成することでした。テーブルには 1,000 万件のレコードがあり、最近 (重複したレコードがあることに気付いたとき) テーブル内のデータをクリーンアップしたところ、以前のレコードの量のほぼ半分に減少しました。とにかく再インデックスが必要だったので、再インデックスを試してみようと思いました。そしてそれは助けました:)

于 2013-05-07T08:51:32.133 に答える