【发布时间】:2012-12-14 14:48:24
【问题描述】:
获得了一个 MySQL 数据库,其中包含一个包含基于邮政编码和门牌号的值的表。因此,主键选择为邮政编码和门牌号,因为这些是要搜索的字段。该数据库包含大约 1000 万条记录。
一个特定的邮政编码包含约 100000 个不同的门牌号,插入速度极慢(每 10000 条记录需要 1 小时)。
编程语言是 Java,我在一批 10000 条中使用准备好的语句,自动提交为 false。
表格结构如下:
+-----------------+-------------+------+-----+---- -----+--------+ |领域 |类型 |空 |钥匙 |默认 |额外 | +-----------------+-------------+------+-----+---- -----+--------+ |邮政编码 | varchar(6) |否 |优先级 |空 | | |房子_no |整数(11) |否 |优先级 |空 | | |沙码 | varchar(45) |否 | |空 | | |仓库 | varchar(3) |否 | |空 | | |网络点 | varchar(6) |否 | |空 | | |地区 | varchar(3) |否 | |空 | | |序列 |整数(11) |否 | |空 | | | cluster_id | varchar(1) |否 | |空 | | | strand_id |整数(11) |否 | |空 | | | strand_props_id |整数(11) |否 | |空 | | |版本号 |整数(11) |否 |优先级 |空 | | +-----------------+-------------+------+-----+---- -----+--------+谁知道这个问题的解决方案?谢谢!
【问题讨论】:
-
在这种情况下,邮政编码和门牌号码可能不是一个好的主键。原因是主键是唯一的。这意味着当邮政编码和门牌号是主键时,每个邮政编码中的每个数字只能有一个房子。你知道吗?
-
@Philipp,我认为 OP 有一个复合键,即由多个字段组成的键。在这种情况下,我看不出这有什么问题?不过,我仍然建议使用代理键。
-
@KingCronus 这绝对是个问题,因为一个 ZIP 包含多条街道。
-
复合主键无论如何都不是一个好主意。为此使用序列号,稍后再考虑强制执行任何唯一性约束。
-
@MarkoTopolnik - 哇...显示我今天需要额外的咖啡,当然你是对的!我没有考虑这种情况,在英国(我所在的地方)我认为每条街道都有不同的代码。
标签: java mysql performance