質問: 大量データの中でJDBCを利用して PreparedStatement方式(?バインドモード)のselectが遅い場合 SQL改善ですかバインドモードを使用しない方向ですか? 画面の検索条件から検索結果を取得します。 次の前提条件を満足する必要があります。 1. 検索条件からSQL文を変更しない 2. 検索条件は未入力もある 3. 既存データで100万件を超える 4. 検索条件が可変のため期待するIndexも可変である ※遅い理由:実行計画を立てるときバインドされるデータが予測できないため最速の計画を利用しないからです。
回答: お使いのDBはなんでしょうか。 DBによっては `SELECT ...FROM ... WITH (Index(index_name))`という構文がつかえたりします。(MS SQL Serverなど) MySQLではつぎの構文 ``` 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; ``` ORACLEはインデックスのヒントをコメント形式で引き渡したりしますが、だいぶ前に試したところではJDBCは引き渡せなかったです。その時はVIEWかPL/SQLで定義しました。