Table SaaS 项目的索引注意事项

Table Indexing consideration for SaaS Project

很高兴听到你们讨论如何最好地考虑索引策略,因为这些 table 中的数据在未来可能会大幅增长。决定继续以单一 table 方法存储多租户数据。例如,我只有几个 table 用于此讨论。

CREATE TABLE [dbo].[TenantID](
    [TenantID] [smallint] IDENTITY(1,1) NOT NULL,
    [TenantName] [varchar](128) NOT NULL
) 
CREATE TABLE [dbo].[MenuType](
    [MenuTypeID] [int] IDENTITY(1,1) NOT NULL,
    [TenantID] [smallint] NOT NULL,
    [MenuTypeName] [varchar](128) NOT NULL
) 

问题:

  1. 我真的需要在 MenuTypeID 上定义主键吗,因为我们知道 SQL 服务器保证增量种子。我可以只在 MenuTypeID 上定义聚簇索引吗?
  2. 在 TenantID 和 MenuTypeName 上定义唯一键。

使用这种方法,我将不会在 table 设计中有主键概念。但是,我想知道 table 中没有主键是否会在将来招来麻烦?

虽然 SQL 服务器应该分配增量 IDENTITY 值,但仍然可以通过 with IDENTITY_INSERT ON 引入 dups。考虑 TenantIDMenuTypeID 上的复合主键约束,以保证主键是唯一的,并且 TenantID[= 上的唯一约束22=] 和 MenuTypeName 以确保 MenuTypeName 对于每个租户都是唯一的。 MenuTypeID 上唯一的 index/constraint 在这里没有任何价值,假设它从未在没有 TenantID 的情况下使用过。

为约束索引之一指定CLUSTERED。聚集索引的最佳选择取决于您最频繁的查询。如有疑问,通常最好将主键索引设为聚簇索引。