Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLITE:用另一个表的索引替换高度冗余_Sqlite_Indexing - Fatal编程技术网

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

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

我有一张大约500000行的t表。其中一列stringtext包含一个很长的字符串,我现在发现实际上只有80个不同的字符串。我想通过将字符串移动到一个单独的表s中,并仅在t中引用它们来分离表t

我创建了一个单独的长字符串表,其中包括一个显式的行索引号,使用:

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%。一切都值得。对于某些统计分析来说,数据库是一个固定的资源,并且随后不会被更改,因此创建数据库的相对成本非常小。再次感谢。