我正在做一个项目,我对 Web 应用程序和 SQL 都很陌生,所以请耐心等待。我正在构建一个 API,我想确保我的用户只能访问特定表中的某些行,这些行在另一个表中具有其客户 ID 的外键,但必须通过另一个表中的用户 ID 进行验证。(一个客户有多个用户并拥有多个资产。目前,客户的所有用户都可以访问任何资产,但没有客户共享资产或用户。)我能想到的方法是这样做
SELECT * FROM [Asset] WHERE Id=@AssetId AND CustomerId=(SELECT CustomerId FROM [User] WHERE UserId=@UserId);
这很好,但是在 Asset 和 User 表中有很多条目,这个查询可能会占用大量时间。这很糟糕,因为对我的 API 发出的每个需要资产数据的请求都应该进行此检查。我可以设置一个索引,实际上 UserId 是 User 中的辅助键,因为它是来自身份验证提供程序的唯一标识符,但我不确定是否应该在 Asset 中为 CustomerId 添加索引。与其他一些表相比,资产表的增长应该相对缓慢(有一个用于审计目的的消息记录表),但我不确定这是否是正确的答案,或者是否有一些更简单的更优化的答案。还是这种查询在规模上如此之快以至于我无需担心?