SQL server两个索引列具有不同的速度性能

时间:2014-12-11 14:46:52

标签: sql sql-server database-performance

我有一个有两列的表:

CREATE TABLE #history(
    Today        INT    NOT NULL,
    LastDay      INT    NOT NULL
           PRIMARY KEY(Today, LastDay))

我还创建了一个非聚集索引:

 CREATE NONCLUSTERED INDEX #history_IX1 ON #history(LastDay)

但是,当我使用“今日”列加入表时,性能会比使用LastDay列更快,比如20s vs 4s。

我认为问题可能是由LastDay列没有正确编入索引引起的。我也使用SQL提示来强制建立索引,结果是一样的。

以下是一个例子:

INSERT INTO anytable(
       anycolumn)
SELECT m.anycolumn
FROM   AMillionTable m
       INNER JOIN #history h
               ON h.Today  = m.day

m.day also indexed.
Same query, when change h.Today to h.LastDay, the process speed significantly drops.

针对此问题的任何解决方案?

1 个答案:

答案 0 :(得分:1)

这是正常的,因为它们是2个不同的索引CLUSTERED与NONCLUSTERED。使用Today列加入时,将使用CLUSTERED索引。 NONCLUSTERED索引需要额外的工作。

您可以在Link

找到更多信息