我有一个只有一列的用户表USER_ID
。这些ID超过200M,不连续,不排序。它在该列上有一个索引 USER_ID_INDEX。我在 MySQL 和 Google Big Query 中有数据库,但我无法在其中任何一个中获得我需要的东西。
我需要知道如何查询这两件事:
1)哪个是特定的行号USER_ID
(一旦表按 排序USER_ID
)
为此,我在 MySQL 中尝试过:
SET @row := 0;
SELECT @row := @row + 1 AS row FROM USERS WHERE USER_ID = 100001366260516;
它运行得很快,但它返回 row=1 因为行计数来自数据集。
SELECT USER_ID, @row:=@row+1 as row FROM (SELECT USER_ID FROM USERS ORDER BY USER_ID ASC) WHERE USER_ID = 100002034141760
这需要很长时间(我没有等到看到结果)。
在大查询中:
SELECT ROW_NUMBER() OVER() row, USER_ID
FROM (SELECT USER_ID from USERS.USER_ID ORDER BY USER_ID ASC)
WHERE USER_ID = 1063650153
这需要很长时间(我没有等到看到结果)。
2)USER_ID
在特定行中(一旦表按 排序USER_ID
)
为此,我在 MySQL 中尝试过:
SELECT USER_ID FROM USERS ORDER BY USER_ID ASC LIMIT 150000000000, 1
给出结果需要 5 分钟。为什么?如果它有索引,它不应该很快吗?
在 Big Query 中,我没有找到方法,因为LIMIT init, num_rows
, 甚至不存在。
我可以在一个新表中订购该表,并添加一个名为RANK
订购的列,并在USER_ID
其上添加一个 INDEX。但是如果我想添加或删除一行,那将是一团糟。
关于如何解决这两个查询的任何想法?
谢谢,娜塔莉亚