sqlite,大型数据库中的重新索引表的方法



我有一个带有一个表my_table的数据库,该数据库由200万行组成。它是这样的结构:

index1 | column_one
______  _______
0      |AA
1      |AB
2      |CD
3      |FFF
4      |AA
...    |...
2902   |TF
....   |...

我在这里遇到的问题是,数据库确实很大,需要几分钟才能完成所需的操作。我发现我可以更快地完成这项工作,如果我要reidindex my_table,例如:

 reindex  | index1 | column_one
 _________  ______  _______
  0       | 0      |AA
  1       | 1      |AB
  2       | 2      |CD
  3       | 3      |FFF
  0       | 4      |AA
  ...     | ...    |...
  8       | 2902   |TF
  ....    | ....   |...

这个"重新索引"值确实可以为我节省,因为它为我提供了一个选择,可以在Miliseconds的表中接收所需的信息,正是我所需要的。但是我现在看不到任何解决方案如何做到这一点,考虑到桌子有2亿行,内存极大地限制了我。

只是查看我对column_one有多少个不同的分类器:

SELECT count(distinct column_one) from my_table;

将需要两分钟:(

可以通过计算所有较小的值来计算此数字:

UPDATE MyTable
SET reindex = (SELECT COUNT(DISTINCT column_one)
               FROM MyTable AS T2
               WHERE T2.column_one < MyTable.column_one);

这对每行独立进行整个计数,因此它不是很高效。

按顺序检索所有值的列表可能是一个更好的主意:

SELECT DISTINCT column_one
FROM MyTable
ORDER BY column_one;

…然后使用列表中的索引更新每个此类值的表。

最新更新