列が1つしかないテーブル USERS がありますUSER_ID
。これらの ID は 200M を超えており、連続しておらず、順序付けられていません。その列にはインデックス USER_ID_INDEX があります。MySQL と Google Big Query に DB がありますが、必要なものを取得できませんでした。
これら2つのことを照会する方法を知る必要があります:
1)特定の行番号はどれですかUSER_ID
(テーブルがによって並べ替えられたらUSER_ID
)
このために、私はMySQLで試しました:
SET @row := 0;
SELECT @row := @row + 1 AS row FROM USERS WHERE USER_ID = 100001366260516;
行カウントはデータセットからのものであるため、高速になりますが、行= 1を返します。
SELECT USER_ID, @row:=@row+1 as row FROM (SELECT USER_ID FROM USERS ORDER BY USER_ID ASC) WHERE USER_ID = 100002034141760
永遠にかかります(結果を見るのを待ちませんでした)。
BigQuery の場合:
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
が存在しないため、方法が見つかりませんでした。
新しいテーブルでテーブルを注文し、その上に INDEX をRANK
注文するという名前の列を追加できます。USER_ID
しかし、行を追加または削除したい場合は混乱します。
これら2つのクエリを解決する方法についてのアイデアはありますか?
ありがとう、ナタリア