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 :)希望这有助于。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐