对包含表的所有列的索引的查询是否与对表本身的查询一样有效?

时间:2016-05-02 09:52:42

标签: sql-server sql-server-2014 database-performance

我在SQL Server中创建了一个表,如下所示:

CREATE TABLE [dbo].[WordForm] (
    [WordFormId]   VARCHAR (20)  NOT NULL,
    [Ascii]        AS            (ascii([WordFormId])) PERSISTED,
    [WordId]       VARCHAR (20)  NOT NULL,
    [Primary]      BIT           DEFAULT ((0)) NOT NULL,
    [PosId]        INT           NOT NULL,
    [Definition]   VARCHAR (MAX) NULL,
    [Sample1]      VARCHAR (MAX) NULL,
    [Synonym]      VARCHAR (100) NULL,
    [CreatedBy]    INT           NOT NULL,
    [CreatedDate]  DATETIME      NOT NULL,
    [ModifiedBy]   INT           NOT NULL,
    [ModifiedDate] DATETIME      NOT NULL,
    [Version]      ROWVERSION    NOT NULL,
    [Sample2]      VARCHAR (MAX) NULL,
    [Sample3]      VARCHAR (MAX) NULL,
    [Sample4]      VARCHAR (MAX) NULL,
    [Sample5]      VARCHAR (MAX) NULL,
    PRIMARY KEY CLUSTERED ([WordFormId] ASC),
    CONSTRAINT [FK_WordFormPos] FOREIGN KEY ([PosId]) REFERENCES [dbo].[Pos] ([PosId]),
    CONSTRAINT [FK_WordFormWord] FOREIGN KEY ([WordId]) REFERENCES [dbo].[Word] ([WordId])
);

我使用WordFormId作为主键,因为它是唯一的,并且很容易查找。

现在在我的前端,我意识到创建身份密钥可能有一个优势 并将其用于此表的主键而不是WordFormId。请注意,要将这个表放在透视图中, 最多可容纳9,000行。很少插入,添加和更新数据,所以我不担心更新索引所花费的时间。

我现在想做的是:

a)添加标识列作为主键 b)通过WordId创建每个列和顺序的索引。

如果我要做这两件事(a)和(b)对查询有效吗?我的想法是 查询将在大多数时间使用索引,这将非常相似 在我使用WordId作为主键之前。

0 个答案:

没有答案