我目前遇到了一个使用许多 sql select 的应用程序的性能问题。
编程语言是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 万个不同的选择查询,此时它需要的时间太长了。