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
)
- 每个租户的 MenuTypeName 应该是唯一的。因此,我会有一个
TenantID 和 MenuTypeName 的唯一索引
- TenantID 应参考租户 table。因此,TenantID 上的外键。
- 我还在考虑我是否应该在 MenuTypeID 上有 主键或只是一个聚簇索引,这是一个自动递增的列。
- 将来,当 table 大小增加时,我应该能够根据 TenantID 轻松地将数据分区到新的数据库服务器。
问题:
- 我真的需要在 MenuTypeID 上定义主键吗,因为我们知道 SQL 服务器保证增量种子。我可以只在 MenuTypeID 上定义聚簇索引吗?
- 在 TenantID 和 MenuTypeName 上定义唯一键。
使用这种方法,我将不会在 table 设计中有主键概念。但是,我想知道 table 中没有主键是否会在将来招来麻烦?
虽然 SQL 服务器应该分配增量 IDENTITY
值,但仍然可以通过 with IDENTITY_INSERT ON
引入 dups。考虑 TenantID 和 MenuTypeID 上的复合主键约束,以保证主键是唯一的,并且 TenantID[= 上的唯一约束22=] 和 MenuTypeName 以确保 MenuTypeName 对于每个租户都是唯一的。 MenuTypeID 上唯一的 index/constraint 在这里没有任何价值,假设它从未在没有 TenantID 的情况下使用过。
为约束索引之一指定CLUSTERED
。聚集索引的最佳选择取决于您最频繁的查询。如有疑问,通常最好将主键索引设为聚簇索引。
很高兴听到你们讨论如何最好地考虑索引策略,因为这些 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
)
- 每个租户的 MenuTypeName 应该是唯一的。因此,我会有一个 TenantID 和 MenuTypeName 的唯一索引
- TenantID 应参考租户 table。因此,TenantID 上的外键。
- 我还在考虑我是否应该在 MenuTypeID 上有 主键或只是一个聚簇索引,这是一个自动递增的列。
- 将来,当 table 大小增加时,我应该能够根据 TenantID 轻松地将数据分区到新的数据库服务器。
问题:
- 我真的需要在 MenuTypeID 上定义主键吗,因为我们知道 SQL 服务器保证增量种子。我可以只在 MenuTypeID 上定义聚簇索引吗?
- 在 TenantID 和 MenuTypeName 上定义唯一键。
使用这种方法,我将不会在 table 设计中有主键概念。但是,我想知道 table 中没有主键是否会在将来招来麻烦?
虽然 SQL 服务器应该分配增量 IDENTITY
值,但仍然可以通过 with IDENTITY_INSERT ON
引入 dups。考虑 TenantID 和 MenuTypeID 上的复合主键约束,以保证主键是唯一的,并且 TenantID[= 上的唯一约束22=] 和 MenuTypeName 以确保 MenuTypeName 对于每个租户都是唯一的。 MenuTypeID 上唯一的 index/constraint 在这里没有任何价值,假设它从未在没有 TenantID 的情况下使用过。
为约束索引之一指定CLUSTERED
。聚集索引的最佳选择取决于您最频繁的查询。如有疑问,通常最好将主键索引设为聚簇索引。