我有一个表格t
大约有 500,000 行。其中一列(stringtext
)包含一个很长的字符串,我现在发现实际上只有80个不同的字符串。我想通过将字符串移动到单独的表中来整理表t
,s
,并且仅在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可能不够聪明,无法构建临时索引。然后就可以进行真空吸尘了。
未经测试。