Sql server SQL Server在nvarchar列上创建聚集索引,强制排序
我想要一个有两列的小表格Sql server SQL Server在nvarchar列上创建聚集索引,强制排序,sql-server,Sql Server,我想要一个有两列的小表格[Id][bigint]和[Name][nvarchar](63)。该列用于标记,它将包含所有存在的标记。 我想强制按名称列按字母顺序排序,以便更快地找到给定的标记 必要的要点是: Id是我的主键,我使用它,例如外键 名称也是唯一的 我想按名字的字母顺序排序 我需要SQL命令来创建约束,因为我使用脚本来创建表 我知道您可以使用聚集索引对表进行排序,但我知道表不一定是按该顺序排序的 我的查询如下所示,但我不知道如何在Name上创建聚集索引,但仍然将Id作为主键: IF NO
[Id][bigint]
和[Name][nvarchar](63)
。该列用于标记,它将包含所有存在的标记。
我想强制按名称列按字母顺序排序,以便更快地找到给定的标记
必要的要点是:
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[Tags]')
AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[Tags]
(
[Id] [bigint] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[Name] [nvarchar](63) NOT NULL,
CONSTRAINT AK_TagName UNIQUE(Name)
)
END
编辑:
我决定听从狗仔队的建议。因此,如果您有相同的问题,请确保您也阅读了他的答案。您可以指定主键是
非聚集的
当将其声明为约束时,您可以将唯一键声明为聚集的
索引
CREATE TABLE [dbo].[Tags] (
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](63) NOT NULL,
CONSTRAINT PK_Tag PRIMARY KEY NONCLUSTERED (Id ASC),
CONSTRAINT AK_TagName UNIQUE CLUSTERED (Name ASC)
);
在列名之后(在键/索引声明中)指定
ASC
或DESC
,也可以设置索引排序顺序。默认值通常为升序。在将主键声明为约束时,可以指定主键为非聚集的
,然后可以将唯一键声明为聚集的
索引
CREATE TABLE [dbo].[Tags] (
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](63) NOT NULL,
CONSTRAINT PK_Tag PRIMARY KEY NONCLUSTERED (Id ASC),
CONSTRAINT AK_TagName UNIQUE CLUSTERED (Name ASC)
);
在列名之后(在键/索引声明中)指定
ASC
或DESC
,也可以设置索引排序顺序。默认值通常是升序。你应该而不是做你想做的事
让Id标识为集群PK。它(在正常使用下)不会碎裂
桌子没有自然的秩序。您必须按排序才能获得订单。是的,数据通常按主键顺序显示,但这只是查询优化器可能使用或可能不使用的一种方便
只需在Name
上放置一个非聚集唯一索引,并在选择中按其排序即可
你真的需要bigint吗?那是一张很大的桌子。你应该不要做你想做的事
让Id标识为集群PK。它(在正常使用下)不会碎裂
桌子没有自然的秩序。您必须按
排序才能获得订单。是的,数据通常按主键顺序显示,但这只是查询优化器可能使用或可能不使用的一种方便
只需在Name
上放置一个非聚集唯一索引,并在选择中按其排序即可
你真的需要bigint吗?这是一个庞大的表。如果没有明确的ORDER BY,就没有ordered table。时期想想并行执行吧。表没有顺序,从来没有,也不重要。重要的是你要查询什么。没有明确的ORDER BY,就没有ordered table。时期想想并行执行吧。表没有顺序,从来没有,也不重要。重要的是您查询的内容。我总是使用bigint作为Id,因为int对于其他表来说非常重要,并且我来自同一个基本实体(对于nhibernate很重要)。如果用户输入一些字母,比如让我们说“su”,我希望它立即显示“summer”或“sun”之类的建议。你真的认为非集群更好吗?为什么你会从这个表中得出结论。我坚持我的答案,不管你接受与否。我在索引方面没有那么丰富的经验,所以我最好还是听从你的建议,选择非聚集的。谢谢,我总是使用bigint作为Id,因为int对于其他表来说非常重要,而且我是从同一个基本实体派生的(对于nhibernate很重要)。如果用户输入一些字母,比如让我们说“su”,我希望它立即显示“summer”或“sun”之类的建议。你真的认为非集群更好吗?为什么你会从这个表中得出结论。我坚持我的答案,不管你接受与否。我在索引方面没有那么丰富的经验,所以我最好还是听从你的建议,选择非聚集的。谢谢我认为最好阅读dba stack exchange关于何时使用非聚集主键的以下答案我认为最好阅读dba stack exchange关于何时使用非聚集主键的以下答案