gpt4 book ai didi

sql-server-2008 - 大量数据的内连接和拆分

转载 作者:行者123 更新时间:2023-12-04 05:26:57 25 4
gpt4 key购买 nike

我们正在处理大量数据(下面给出的行数):

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 解决大量选择的方法。

注意:ConvertCsvToTable 是一个 Split 函数,它已被确定为最佳执行。

谢谢!

最佳答案

这就是我要尝试的:
使用函数返回的结构创建一个临时表。确保将列 ID 设置为主键,以便优化器将其考虑在内...

CREATE TABLE #temp
(id int not null
...
,PRIMARY KEY (id) )

然后调用函数
insert into #temp exec ConvertCsvToTable('1,2,3,4,5.......10000')

然后使用直接加入查询的临时表
SELECT t1.[id], t1.[column2]
FROM Table1 t1, t2, #temp
where t1.id = t2.id
and t1.[column2] = #temp.id

关于sql-server-2008 - 大量数据的内连接和拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13092561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com