Java 由于主键原因,在数据库上的插入速度较慢

Java 由于主键原因,在数据库上的插入速度较慢,java,mysql,performance,Java,Mysql,Performance,获取了一个MySQL数据库,其中的表包含基于zipcode和house number的值。因此,主键被选择为zipcode和house number,因为这是要搜索的字段。该数据库包含大约1 000万条记录 一个特定的zipcode由大约100000个不同的门牌号组成,插入速度非常慢(每10000条记录1小时) 编程语言是Java,我在10000个语句中使用准备好的语句,其中autocommit为false 该表的结构如下: +-----------------+-------------+--

获取了一个MySQL数据库,其中的表包含基于zipcode和house number的值。因此,主键被选择为zipcode和house number,因为这是要搜索的字段。该数据库包含大约1 000万条记录

一个特定的zipcode由大约100000个不同的门牌号组成,插入速度非常慢(每10000条记录1小时)

编程语言是Java,我在10000个语句中使用准备好的语句,其中autocommit为false

该表的结构如下:

+-----------------+-------------+------+-----+---------+-------+ | 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 | | +-----------------+-------------+------+-----+---------+-------+ +-----------------+-------------+------+-----+---------+-------+ |字段|类型|空|键|默认|额外| +-----------------+-------------+------+-----+---------+-------+ |zipcode | varchar(6)| NO | PRI | NULL || |豪斯国际酒店(11)| no | PRI | NULL || |sanddcode | varchar(45)| NO | | NULL || |仓库|瓦查尔(3)|否| |空|| |网络点| varchar(6)|否|空|| |区域| varchar(3)| NO | | NULL || |序号| int(11)| NO | | NULL || |簇id | varchar(1)| NO | | NULL || |strand|u id | int(11)| NO | | NULL || |strand_props|u id | int(11)| NO | | NULL || |版本| id | int(11)| NO | PRI | NULL || +-----------------+-------------+------+-----+---------+-------+
有谁知道这个问题的解决办法吗?谢谢

如果您不想从GUI加载数据,我建议使用sql loader,它可以很快加载所有数据


当需要插入大量行时,首先删除键,然后插入所有数据,然后重新创建键可能会更快。这样,数据库就不需要花很多时间更新这些密钥。

在这种情况下,Zicode和门牌号可能不是一个好的主键。原因是主键是唯一的。这意味着当zipcode和house number是主键时,每个邮政编码中只能有一个带有每个号码的房子。你知道吗?@Philipp,我认为OP有一个复合密钥,即由多个字段组成的密钥。在这种情况下,我不认为这是一个问题?不过,我还是建议使用代理键。@KingCronus这肯定是个问题,因为一个ZIP包含多个街道。无论如何,复合主键不是一个好主意。使用序列号,稍后再考虑强制执行任何唯一性约束。@MarkoTopolnik-Wow…显示我今天需要额外的咖啡,当然你是对的!我没有考虑这种情况,在英国(我所在的地方),我认为每条街道都有不同的代码。如果是第一次加载,那么您可以使用这种方法,并在初始加载完成后让您的应用程序接管数据库。如果你觉得有帮助,请接受。作为参考:不要评论你自己的答案;编辑它。评论被认为是StackOverflow上的二等公民,与其说是一个功能,不如说是一种必要的邪恶。