由于主键导致数据库缓慢插入

时间:2012-12-14 14:48:25

标签: java mysql performance

获得一个MySQL数据库,其中包含一个包含基于zipcode和门牌号的值的表。因此,主键被选择为zipcode和门牌号,因为这些是要搜索的字段。该数据库包含大约1000万条记录。

一个特定的邮政编码包含~100000个不同的门牌号码,插入速度极慢(每10000条记录1小时)。

编程语言是Java,我使用批处理10000中的预处理语句,并且自动提交为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    |       |
+-----------------+-------------+------+-----+---------+-------+

任何知道解决方案的人?谢谢!

2 个答案:

答案 0 :(得分:1)

如果您不想从GUI加载数据,我建议使用sql loader,它可以在很短的时间内加载所有数据。

https://metacpan.org/pod/SQL::Loader::MySQL

http://www.roseindia.net/sql/mysql-example/loader-tutorial.shtml

答案 1 :(得分:1)

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