[英]What is the most efficient way to find parents without childs on Google Spanner interleaved tables?
我有两个非常大的表,它们的主键交错(只有一列,所以它是一对一的关系)。 父表上的几行没有子表,我想找到它们。
目前,我正在通过 NULL 值进行 JOIN 查询和搜索:
SELECT Users.userID
FROM Users
LEFT JOIN Licenses
ON Users.userID = Licenses.userID
WHERE Licenses.license IS NULL
但是这个查询仍然需要读取所有用户表来做 JOIN,真的很慢。
我知道如果许可证列在用户表中,我可以用它创建一个索引,并且只需要读取具有 NULL 许可证值的行,但将“许可证”列放在相同的“用户”中不是一个选项“ 桌子。
有没有办法使用不同的表通过尚未获得许可证的用户 ID? 例如,具有来自不同表的列的索引。 (我正在使用交错,但它会是更好的外键吗?)
澄清一下,以下是正确的理解吗?
为了避免扫描用户表,也许许可证表甚至可以包括没有许可证的用户 ID。 然后,可以创建 Licenses.license 索引以帮助搜索 NULL 的许可证。
或者,当在用户中插入/删除用户 ID 和在许可证中插入/删除许可证时,应用程序可以跟踪其他 state。 例如,跟踪包含所有没有许可证的 UserId 的 MissingLicense 表。 MissingLicense 表将有一个主键 UserId。 在没有许可证的情况下插入 UserId 时,也要插入 MissingLicense。 为用户插入许可证时,从 MissingLicense 中删除。 从 Users 中删除 UserId 时,从 MissingLicense 中删除。 MissingLicense 可以在用户表下与 ON DELETE CASCADE 交错。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.