

大量データの中でJDBCを利用して  
PreparedStatement方式(?バインドモード)のselectが遅い場合  
SQL改善ですかバインドモードを使用しない方向ですか？

画面の検索条件から検索結果を取得します。  
次の前提条件を満足する必要があります。

  1. 検索条件からSQL文を変更しない
  2. 検索条件は未入力もある
  3. 既存データで100万件を超える
  4. 検索条件が可変のため期待するIndexも可変である

※遅い理由:実行計画を立てるときバインドされるデータが予測できないため最速の計画を利用しないからです。


CC BY-SA 3.0
2016-02-08T23:51:55.873
21864
2016-04-12T00:42:59.983
2016-02-11T23:37:45.087
13094
13094
question
java jdbc
PreparedStatementのSelectが遅い場合


お使いのDBはなんでしょうか。

DBによっては `SELECT ...FROM ... WITH (Index(index_name))`という構文がつかえたりします。(MS SQL
Serverなど)

MySQLではつぎの構文

[code]

    SELECT * FROM table1 USE INDEX (col1_index,col2_index)
      WHERE col1=1 AND col2=2 AND col3=3;
    
    SELECT * FROM table1 IGNORE INDEX (col3_index)
      WHERE col1=1 AND col2=2 AND col3=3;
    
[/code]

ORACLEはインデックスのヒントをコメント形式で引き渡したりしますが、だいぶ前に試したところではJDBCは引き渡せなかったです。その時はVIEWかPL/SQLで定義しました。


CC BY-SA 3.0
2016-02-09T01:03:52.020
21867
2016-02-09T01:09:33.707
2016-02-09T01:09:33.707
7837
7837
21864
answer