SQL 我有一张多语言表没主键,有必要设置主键吗?
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
:SQL 我有一张多语言表没主键,有必要设置主键吗?![]() 在没有主键的情况下,这个多语言表已经变成了一个“堆 (Heap)”。随着数据量增长,堆的低效会导致性能问题日益严重。 🧐 堆表 (Heap) 导致性能问题的三个主要原因
🚀 立即生效的解决方案:创建主键(聚集索引)考虑到表越来越大,强烈建议立即为该表创建一个聚集索引作为主键。
你的创建表SQL: if not exists (select * from dbo.sysobjects where id=object_id(N'[dbo].[multi_language_support]') and OBJECTPROPERTY(id, N'IsUserTable')=1) CREATE TABLE [dbo].[multi_language_support]( [id] [int] IDENTITY(1,1) NOT NULL, [language] [nvarchar](50) NULL, [ChineseSimpleInfo] [nvarchar](max) NULL, [translationInfo] [nvarchar](max) NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY];根据你提供的表结构, 执行以下语句即可: sql ALTER TABLE [dbo].[multi_language_support] ADD CONSTRAINT PK_multi_language_support PRIMARY KEY CLUSTERED (id ASC); ✅ 添加主键后的收益
如果需要增加检查是否存在主键,下面提供两种检查方式,推荐第一种(检查主键约束名称)。 ✅ 方案一:检查自定义的主键约束名(推荐)sql IF NOT EXISTS (SELECT 1 FROM sys.objects WHERE type = 'PK' AND parent_object_id = OBJECT_ID(N'[dbo].[multi_language_support]') AND name = 'PK_multi_language_support') BEGIN ALTER TABLE [dbo].[multi_language_support] ADD CONSTRAINT PK_multi_language_support PRIMARY KEY CLUSTERED (id ASC); END 说明:只检查我们定义的约束名 🛡️ 方案二:检查表是否已存在任何主键(更严谨)sql IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[multi_language_support]') AND is_primary_key = 1) BEGIN ALTER TABLE [dbo].[multi_language_support] ADD CONSTRAINT PK_multi_language_support PRIMARY KEY CLUSTERED (id ASC); END 说明:无论主键叫什么名字,只要该表已经有一个主键,就不会再添加。适合更通用的场景。 该文章在 2026/5/6 10:46:42 编辑过 |
关键字查询
相关文章
正在查询... |