我有一个包含一个表my_table
的数据库,其中包含两亿行。它的结构如下:
index1 | column_one
______ _______
0 |AA
1 |AB
2 |CD
3 |FFF
4 |AA
... |...
2902 |TF
.... |...
我面临的问题是,数据库非常庞大,需要几分钟才能完成所需的操作。我发现如果我重新索引my_table
,例如:
reindex | index1 | column_one
_________ ______ _______
0 | 0 |AA
1 | 1 |AB
2 | 2 |CD
3 | 3 |FFF
0 | 4 |AA
... | ... |...
8 | 2902 |TF
.... | .... |...
这个'重新索引'值真的会拯救我,因为它给了我一个选项,可以在几毫秒内收到表中所需的信息,正是我需要的。但是我现在没有看到任何解决方案我怎么能做到这一点,考虑到表有2亿行,内存限制了我很多。
只是为了查看我与column_one
有多少种不同的分类器:
SELECT count(distinct column_one) from my_table;
需要两分钟:)
答案 0 :(得分:1)
可以通过计算所有较小的值来计算这个数字:
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;
...然后使用列表中的索引更新每个此类值的表。