大量のデータに取り組んでいます (以下に行数を示します)。
Table 1 : 708408568 rows -- 708 million
Table 2 : 1416817136 rows -- 1.4 billion
Table 1 Schema:
----------------
ID - Int PK
column2 - Int
Table 2 Schema
----------------
Table1ID - Int FK
SomeColumn - Int
SomeColumn - Int
Table1 には、Table 2 の FK として機能する PK1 があります。
インデックスの詳細:
Table1 :
PK Clustered Index on Id
Non Clustered (Non Unique) on column2
Table 2 :
Table1ID (FK) Clustered Index
以下は、実行する必要があるクエリです。
SELECT t1.[id]
,t1.[column2]
FROM Table1 t1
inner join Table2 t2
on s.id = cs.id
WHERE t1.[column2] in (select [id] from ConvertCsvToTable('1,2,3,4,5.......10000')) -- 10,000 Comma seperated Ids
要約すると、ID の内部結合は、PK と FK の両方で同じ ID のクラスター化インデックスによって処理する必要があります。column2 の "巨大な" Where 条件については、非クラスター化インデックスがあります。
ただし、クエリは 100 個の ID の小さなサブセットで 4 分かかり、10,000 個の ID を渡す必要があります。
これを行うことができる設計上のより良い方法はありますか、それともテーブルの分割が役立つ可能性がありますか?
Inner Join と Where IN を使用して膨大な量の Select を解決する方法をいくつか知りたかっただけです。
注 : ConvertCsvToTable は、最適に実行することが既に決定されている Split 関数です。
ありがとう !