SQLITE:将高度冗余的替换为另一个表的索引



我有一个表格t大约有 500,000 行。其中一列(stringtext)包含一个很长的字符串,我现在发现实际上只有80个不同的字符串。我想通过将字符串移动到单独的表中来整理表ts,并且仅在t中引用它们。

我创建了一个单独的长字符串表,包括实际上使用以下内容的显式行索引号:

CREATE TEMPORARY TABLE stmp AS
SELECT DISTINCT
stringtext
FROM t;
CREATE TABLE s AS
SELECT _ROWID_ AS stringindex, stringtext
FROM stmp;

(正是创建这个表,向我展示了只有几个不同的字符串)。

我现在如何将t中的字符串文本替换为s中的相应字符串索引?

我会考虑类似Update t set stringtext = (select stringindex from s where s.stringtext = t.stringtext)的东西,并建议首先在s(stringtext)上做一个索引,因为SQLite可能不够聪明,无法构建临时索引。然后就可以进行真空吸尘了。

未经测试。

最新更新