我目前正在使用SSMS,使用两张表,这两张表都有数百万条记录;我们称之为: latest_status表和 dupe_hash 表。
latest_status :
latest_status_PK - bigint - identity(1,1)
status - bigint
50 =>阶段零
100 =>阶段酮
200 =>阶段二
999 =>重复的失败的
dupe_hash :
dupe_hash_PK - bigint - identity(1,1)
latest_status_FK(与latest_status的关系) - bigint
md5 - varchar(256)
batch_id - uniqueidentifier
我的目标是查看 dupe_hash 记录(其中 latest_status .status = 100)并查看此记录 md5 与其他记录 md5 相同;我根据状态 es更新了这些内容的 latest_status.status 。有点像:
* record_1' s = 100& record_2' s = 200 =>将record_1的状态更新为999
* record_1' s = 100& record_2' s = 50 =>将record_1的状态更新为200,将记录_2的状态更新为999
我目前正在使用基于集合的操作,将此查询保存到表变量中,并使用case语句更新 latest_status 表。在md5的分区中,我根据状态命令子集,因为最后我只想保留一条记录( rowid = 1)而其他记录设置为999:
SELECT ROW_NUMBER() OVER(PARTITION BY DUPHASH.MD5 ORDER BY CASE WHEN LATEST_STAT.STATUS = 200 THEN 0 WHEN LATEST_STAT.STATUS = 50 THEN 1 ELSE 1 END, LATEST_STAT.latest_status_PK DESC) ROWID,
LATEST_STAT.CLAIM_OUTBOUND_LATEST_STATUS_KEY,
LATEST_STAT.STATUS,
DUPHASH.DUPLICATE_KEY,
DUPHASH.BATCH_ID,
DUPHASH.MD5
FROM DBO.DUPE_HASH DUPHASH
INNER JOIN DBO.LATEST_STATUS LATEST_STAT
WHERE MD5 IN (SELECT DISTINCT MD5
FROM DBO.DUPE_HASH DUPHASH
INNER JOIN DBO.LATEST_STATUS LATEST_STAT
ON DUPHASH.LATEST_STATUS_FK = LATEST_STAT.LATEST_STATUS_PK
WHERE STATUS = 105) ON DUPHASH.LATEST_STATUS_FK = LATEST_STAT.LATEST_STATUS_PK
这让我想到了我的实际问题:这种方法是否有任何替代/改进可以支持实时/跨境处理?
表格分区?
非关系型数据库?
我真的全都耳朵。谢谢!