SQLITE:用另一个表的索引替换高度冗余
我有一张大约500000行的t表。其中一列stringtext包含一个很长的字符串,我现在发现实际上只有80个不同的字符串。我想通过将字符串移动到一个单独的表s中,并仅在t中引用它们来分离表t 我创建了一个单独的长字符串表,其中包括一个显式的行索引号,使用:SQLITE:用另一个表的索引替换高度冗余,sqlite,indexing,Sqlite,Indexing,我有一张大约500000行的t表。其中一列stringtext包含一个很长的字符串,我现在发现实际上只有80个不同的字符串。我想通过将字符串移动到一个单独的表s中,并仅在t中引用它们来分离表t 我创建了一个单独的长字符串表,其中包括一个显式的行索引号,使用: CREATE TEMPORARY TABLE stmp AS SELECT DISTINCT stringtext FROM t; CREATE TABLE s AS SELECT _ROWID_ AS stringin
CREATE TEMPORARY TABLE stmp AS
SELECT DISTINCT
stringtext
FROM t;
CREATE TABLE s AS
SELECT _ROWID_ AS stringindex, stringtext
FROM stmp;
创建这个表时,我发现只有几个不同的字符串
现在如何用s中相应的stringindex替换t中的stringtext?我会考虑更新t set stringtext=select stringindex from s,其中s.stringtext=t.stringtext,并建议首先在sstringtext上建立索引,因为SQLite可能不够聪明,无法构建临时索引。然后进行真空吸尘
未经测试。谢谢。我使用了您的建议,但做了一些稍微不同的事情,这样我就可以在表t中得到一个名为stringindex的列,而不是简单地用s.stringindex值重新填充t.stringtext。手动在s.stringtext上创建索引确实加快了速度,大约提高了10%;对我来说并不重要,但它可能是。清理将数据库减少到原来的40%。一切都值得。对于某些统计分析来说,数据库是一个固定的资源,并且随后不会被更改,因此创建数据库的相对成本非常小。再次感谢。