我有一个带有一个表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;
…然后使用列表中的索引更新每个此类值的表。