現在、多くの SQL 選択を使用するアプリケーションでパフォーマンスの問題が発生しています。
プログラミング言語は Java で、mysql データベースを使用しています。約 1000 万件のレコードが含まれています。実行する必要があるのは、パラメーターとして郵便番号と番地を使用してデータベース内のレコードを検索することです。レコードが見つからない場合は、郵便番号のみを使用してクエリを実行し、家番号が最も小さいレコードを取得する必要があります。データベースで郵便番号が見つからない場合、アプリケーションはこれに対処する必要があります。
したがって、単一のクエリを実行するためのコードは次のようになります。
Statement select = "select * from zipcode_addresses where zipcode = ? and houseNo =?";
ResultSet rs = select.executeQuery();
if(rs.next()) {
dealWithResult(rs);
}
else {
Statement alternativeSelect = "select * from zipcode_addresses where zipcode = ? group by houseNo having min(houseNo)";
ResultSet rs = alternativeSelect.executeQuery();
if(rs.next()) {
dealWithResult(rs);
} else {
System.err.println("Could not find zipcode :" + zipcode);
}
}
見つからないデータを処理するバッチ選択クエリを実行する適切な方法はありますか?
ありがとう!
アップデート
テーブル構造は次のとおりです。
+-----------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| zipcode | varchar(6) | NO | PRI | NULL | |
| house_no | int(11) | NO | PRI | NULL | |
| sanddcode | varchar(45) | NO | | NULL | |
| depot | varchar(3) | NO | | NULL | |
| network_point | varchar(6) | NO | | NULL | |
| region | varchar(3) | NO | | NULL | |
| seq | int(11) | NO | | NULL | |
| cluster_id | varchar(1) | NO | | NULL | |
| strand_id | int(11) | NO | | NULL | |
| strand_props_id | int(11) | NO | | NULL | |
| version_id | int(11) | NO | PRI | NULL | |
+-----------------+-------------+------+-----+---------+-------+
バージョン ID、zipcode、house_no の主キー zipcode と house_no のインデックス、および zipcode の別のインデックス。どちらも BTREE インデックスを使用します。
アプリケーションを使用して 100 万の個別の選択クエリを実行すると、時間がかかりすぎます。