mysql 索引多怎么办_mysql – 表有8千万记录和添加索引需要超过18小时(或永远)!怎么办?...

Ok原来,这个问题不仅仅是一个简单的创建一个表,索引它,忘记了问题:)这里是我做了只是为了防止其他人面临同样的问题(我使用了IP地址的示例,但它适用于其他数据类型):

问题:您的表有数百万条目,您需要快速添加索引

Usecase:考虑在查找表中存储数百万个IP地址。添加IP地址不应该是一个大问题,但是在它们上创建索引需要超过14小时。

案例#1:当所需的表尚未创建时

CREATE TABLE IPADDRESSES(

id INT UNSIGNED NOT NULL AUTO_INCREMENT,

ipaddress BIGINT UNSIGNED,

PRIMARY KEY(id, ipaddress)

) ENGINE=MYISAM

PARTITION BY HASH(ipaddress)

PARTITIONS 20;

案例#2:当所需的表已经创建时。

似乎有一种方法使用ALTER TABLE来做到这一点,但我还没有想出一个合适的解决方案。相反,有一个稍微低效的解决方案:

CREATE TABLE IPADDRESSES_TEMP(

id INT UNSIGNED NOT NULL AUTO_INCREMENT,

ipaddress BIGINT UNSIGNED,

PRIMARY KEY(id)

) ENGINE=MYISAM;

将您的IP地址插入此表。然后创建具有分区的实际表:

CREATE TABLE IPADDRESSES(

id INT UNSIGNED NOT NULL AUTO_INCREMENT,

ipaddress BIGINT UNSIGNED,

PRIMARY KEY(id, ipaddress)

) ENGINE=MYISAM

PARTITION BY HASH(ipaddress)

PARTITIONS 20;

然后终于

INSERT INTO IPADDRESSES(ipaddress) SELECT ipaddress FROM IPADDRESSES_TEMP;

DROP TABLE IPADDRESSES_TEMP;

ALTER TABLE IPADDRESSES ADD INDEX(ipaddress)

有你去…索引新表上花了我大约2个小时在一个3.2GHz的机器与1GB RAM :)希望这有助于。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值