我们正在处理大量数据(下面给出的行数):
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
表 1 有 PK1,它作为表 2 的 FK 服务。
索引详情:
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 是一个拆分函数,它已经被确定为最佳执行。
谢谢 !