簡體   English   中英

如何通過索引來提高我的查詢性能

[英]How to improve my query performance by indexing

我只是想知道如何將此表索引以獲得最佳性能? 這可能會容納大約20M行。

  CREATE TABLE [dbo].[Table1]( 
  [ID] [bigint] NOT NULL,
  [Col1] [varchar](100) NULL,
  [Col2] [varchar](100) NULL,
  [Description] [varchar](100) NULL
  ) ON [PRIMARY]

基本上,這個表格只會以這種方式查詢。

    SELECT ID FROM Table1
    WHERE Col1 = 'exactVal1' AND Col2 = 'exactVal2' AND [Description] = 'exactDesc'

這就是我做的:

    CREATE NONCLUSTERED INDEX IX_ID
    ON Table1(ID)
    GO 

    CREATE NONCLUSTERED INDEX IX_Col1
    ON Table1(Col1)
    GO 

    CREATE NONCLUSTERED INDEX IX_Col2
    ON Table1(Col2)
    GO 

    CREATE NONCLUSTERED INDEX IX_ValueDescription
    ON Table1(ValueDescription)
    GO 

我是否正確索引所有這些列? 還沒那么自信。 剛接觸SQL的東西,如果我在正確的軌道上,請告訴我。

同樣,很多數據都會放在這張桌子上。 不幸的是,由於沒有可用的數據,我無法測試性能。 但我很快就會生成一些虛擬數據來測試性能。 但如果已經有另外一個選項(建議)我可以將結果與之比較,那將會很棒。

謝謝,傑克

我會將這些索引合並到一個索引中,而不是具有三個單獨的索引。 例如:

CREATE INDEX ix_cols ON dbo.Table1 (Col1, Col2, Description)

如果列的這種組合在表中是唯一的,那么您應該添加UNIQUE關鍵字以使索引唯一。 這是出於性能原因,但更重要的是,要強制執行唯一性。 如果合適,也可以將其創建為主鍵。

將所有列放入一個索引將提供更好的性能,因為SQL Server不需要使用多個傳遞來查找您正在尋找的行。

嘗試這個 -

CREATE TABLE dbo.Table1 
(
      ID BIGINT NOT NULL
    , Col1 VARCHAR(100) NULL
    , Col2 VARCHAR(100) NULL
    , [Description] VARCHAR(100) NULL
)
GO

CREATE CLUSTERED INDEX IX_Table1 ON dbo.Table1 
(
      Col1
    , Col2
    , [Description]
)

或這個 -

CREATE TABLE dbo.Table1 
(
      ID BIGINT PRIMARY KEY NOT NULL
    , Col1 VARCHAR(100) NULL
    , Col2 VARCHAR(100) NULL
    , [Description] VARCHAR(100) NULL
)
GO

CREATE UNIQUE NONCLUSTERED INDEX IX_Table1 ON dbo.Table1 
(
      Col1
    , Col2
    , [Description]
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM