0

問い合わせ中です。

SELECT ttf.default_text
  FROM test_template_field ttf, TEST t
 WHERE ttf.schema_field_id = 2044
--HERE
   AND ttf.test_template_id = t.test_template_id
   AND t.workflow_node_id IN (
          SELECT wn.workflow_node_id
            FROM lims_sys.workflow_node wn, lims_sys.workflow_user wu
           WHERE wn.workflow_id = wu.workflow_id
             AND wn.workflow_node_type_id = 42
             AND wu.u_external_category IN ('M'))
             group by ttf.DEFAULT_TEXT

これは問題なく動作し、8 秒で結果が返されます。しかし、別の AND 関数を追加すると、結果が返されるまでに 28 分かかります。これについて、彼の場所は「--HERE」でした

AND ttf.default_text NOT IN ('Preparation Microbiology', 'Other', 'Preparation')

なぜ遅いのかわかりません..誰か助けてくれますか?

4

3 に答える 3

0
  • DBMS_STATSを使用して、Oracle が実行計画を決定するために使用するテーブル統計を更新します。
  • これで解決しない場合は、クエリでオプティマイザーのヒントを使用して、クエリ オプティマイザーのお尻を正しい方向に向けることができます。
于 2013-11-07T12:59:32.907 に答える
0

EXISTS を試すこともできます:

SELECT ttf.default_text
  FROM test_template_field ttf, TEST t
 WHERE ttf.schema_field_id = 2044
   AND ttf.test_template_id = t.test_template_id
   AND EXISTS
       (
            SELECT 1
              FROM lims_sys.workflow_node wn, lims_sys.workflow_user wu
             WHERE wn.workflow_id = wu.workflow_id
               AND wn.workflow_node_type_id = 42
               AND wu.u_external_category = 'M'
               AND t.workflow_node_id  = wn.workflow_node_id)
 GROUP BY ttf.default_text
;
于 2013-11-07T13:33:52.507 に答える
0

インデックスがあるかどうかを確認します

test_template_field.schema_field_id、test_template_field.test_template_id、test.test_template_id、lims_sys.workflow_node.workflow_id、wu.u_external_category、wn.workflow_node_type_id

このクエリも試してください

SELECT ttf.default_text
  FROM test_template_field ttf
  JOIN TEST t
    on ttf.test_template_id = t.test_template_id
  JOIN (SELECT wn.workflow_node_id
          FROM lims_sys.workflow_node wn
          JOIN lims_sys.workflow_user wu
            ON wn.workflow_id = wu.workflow_id
           AND wu.u_external_category = 'M'
         WHERE wn.workflow_node_type_id = 42) wni
    on t.workflow_node_id = wni.workflow_node_id
 WHERE ttf.schema_field_id = 2044
      AND ttf.default_text NOT IN ('Preparation Microbiology', 'Other', 'Preparation')
 group by ttf.DEFAULT_TEXT

NOT IN に時間がかかりすぎているようです ( ttf.schema_field_id = 2044 の行が多すぎます)

このクエリも試してください

SELECT *
  FROM (SELECT ttf.default_text
          FROM test_template_field ttf
          JOIN TEST t
            on ttf.test_template_id = t.test_template_id
          JOIN (SELECT wn.workflow_node_id
                 FROM lims_sys.workflow_node wn
                 JOIN lims_sys.workflow_user wu
                   ON wn.workflow_id = wu.workflow_id
                  AND wu.u_external_category = 'M'
                WHERE wn.workflow_node_type_id = 42) wni
            on t.workflow_node_id = wni.workflow_node_id
         WHERE ttf.schema_field_id = 2044) ss
 WHERE ss.default_text NOT IN
       ('Preparation Microbiology', 'Other', 'Preparation')
 group by ss.DEFAULT_TEXT
于 2013-11-07T12:50:40.167 に答える