2016-06-14 15 views
2

私はSQLに慣れていないので、非常に簡単なステートメントを実行するためのより速い方法を探しています。テーブルには、行を返すために一致する複数の値があります。進めるより速い方法がありますか?テーブルは私が変更を加える管理者権限を持っていないビューです。SQL、どこよりも速い実行方法?

select * from TABLE.View_xy 
where location=1 
and b=2 
and c=3 
and d=4 
and e=5 
and f=6 
and manDate between (TIMESTAMP '2016-06-01 00:00:00') and (TIMESTAMP '2016-06-02 23:59:59') 
and g=7 
+2

これは最も速い方法ですが、=述語にインデックスを作成し、その間で終わらせてください。 – Gar

+1

@Garおそらくアクセス権がなく、テーブルではないビューです。 –

+0

これらのフィールドの一部が派生/計算値でない限り、同等の基礎となるフィールドにインデックスを置くと役立ちます。 –

答えて

1

まあ、そのビューとあなたがそれを調整することができない場合、あまりあなたはそれをより効率的にするために、このクエリを行うことができます(すべてのは考えるだけで、基本的なフィルタ条件である)があります。

ビューのデータを含む一時テーブル、インデックス、このテーブルを作成し、テーブルの上の選択を実行します。

は私が提案できることは、これがあります。必要な回数だけこれを行うことができます。

CREATE TABLE tmp_for_select AS 
SELECT * FROM TABLE.View_xy; 

CREATE INDEX IND_NAME ON tmp_for_select(location,b,c,d,e,f,g,manDate) ; 

select * from tmp_for_select 
where location=1 and b=2 and c=3 
    and d=4 and e=5 and f=6 
    and manDate between (TIMESTAMP '2016-06-01 00:00:00') and (TIMESTAMP '2016-06-02 23:59:59') 
    and g=7; 

DROP TABLE tmp_for_select; 
+0

"権限が不十分" :) – muka90

+0

別のテーブルを作成することはできませんか? – sagi

+0

ORA-01031 - "権限が不十分" *原因: の権限を持たずにデータベース操作を実行しようとしました。 : '( – muka90

関連する問題