Mysql:在 14 亿条记录上创建索引

SiL*_*oNG 9 mysql indexing

我有一张包含 14 亿条记录的表。表结构如下:

CREATE TABLE text_page (
    text VARCHAR(255),
    page_id INT UNSIGNED
) ENGINE=MYISAM DEFAULT CHARSET=ascii
Run Code Online (Sandbox Code Playgroud)

要求是在列上创建索引text

表大小约为34G。

我尝试通过以下语句创建索引:

ALTER TABLE text_page ADD KEY ix_text (text)
Run Code Online (Sandbox Code Playgroud)

经过 10 个小时的等待,我终于放弃了这种方法。

这个问题有什么可行的解决方案吗?

UPDATE:该表不太可能被更新或插入或删除。之所以要在列上创建索引,text是因为这种sql查询会被频繁执行:

SELECT page_id FROM text_page WHERE text = ?
Run Code Online (Sandbox Code Playgroud)

更新:我已经通过对表进行分区解决了这个问题。

该表在 column 上分为 40 个部分text。然后在表上创建索引大约需要1个小时才能完成。

当表变得很大时,MySQL 索引创建似乎变得很慢。分区将表减少为更小的主干。

小智 2

一种方法是创建一个带有索引集的新表并将数据复制到新表。

另外,请确保有足够的临时空间。