簡體   English   中英

SQL Server:聚集索引慢

[英]SQL Server : clustered index slow

我有2個數據庫表:

  1. 包含gps消息的Message
  2. 包含消息傳感器值的MessageData

我加入他們以獲得2個日期之間的傳感器值。

查詢以99%的時間緩慢返回結果,以尋找聚簇索引。

如何改善這個表現? 在索引或查詢方面有什么建議嗎?

我對聯接運行以下查詢:我使用主鍵> 3264353049進行過濾,以防止查找日期與過去幾年的行有關

SELECT 
    t.MessageId, t.DataSourceId, t.[Value],
    DataSource.SourceNameId, DataSource.Name
FROM 
    [MessageData] t
INNER JOIN 
    [Message] m ON t.MessageId = m.MessageId
LEFT JOIN
    DataSource ON t.DataSourceId = DataSource.DataSourceId
WHERE
    t.MessageId > 3264353049 
    AND m.ObjectId = @objId 
    AND m.GpsTime BETWEEN @dtFrom AND @dtTo 
    AND m.Valid = 1;

查詢計划時間?

查詢計划畫面2

我有這些索引:

ALTER TABLE [MessageData] 
    ADD CONSTRAINT [AnalogData_PK] 
    PRIMARY KEY CLUSTERED ([MessageId] ASC, [DataSourceId] ASC)

CREATE NONCLUSTERED INDEX [MessageData_DataSourceId_IDX] 
ON [MessageData] ([DataSourceId] ASC)
GO

CREATE NONCLUSTERED INDEX [IX_gpstime_objectid] 
ON [Message] ([GpsTime] ASC)
INCLUDE ([MessageId], [ObjectId]) 
GO

CREATE UNIQUE CLUSTERED INDEX [Message_Object_UK] 
ON [Message] ([ObjectId] ASC, [GpsTime] ASC, [MessageId] ASC)
GO

消息表數據:

MessageId            ObjectId    VectorAngle VectorSpeed Altitude    GpsTime                        X                      Y                      VisibleSatelites
-------------------- ----------- ----------- ----------- ----------- ------------------------------ ---------------------- ---------------------- ----------------
9988600080           192         0           0           0           2017-07-19 00:03:20            0             0             0
9988600082           192         0           0           0           2017-07-19 00:08:20            0             0             0
9988600086           192         0           0           0           2017-07-19 00:13:20            0             0             0
9988600089           192         0           0           0           2017-07-19 00:18:20            0             0             0
9988600092           192         0           0           0           2017-07-19 00:23:20            0            0             0

MessageData表數據:

MessageId            DataSourceId Value                  SourceNameId Name
-------------------- ------------ ---------------------- ------------ ------------------------------
9988600080           6364         0                      1            Engine
9988600080           6365         0                      2            Digital Input Status 2
9988600080           325346       0                      179          DOUT 1
9988600080           325347       0                      180          DOUT 2
9988600080           334214       0                      69           Bettary
9988600082           6364         0                      1            Engine
9988600082           6365         0                      2            Digital Input Status 2
9988600082           325346       0                      179          DOUT 1
9988600082           325347       0                      180          DOUT 2
9988600082           334214       0                      69           Bettary
9988600086           6364         0                      1            Engine
9988600086           6365         0                      2            Digital Input Status 2
9988600086           325346       0                      179          DOUT 1
9988600086           325347       0                      180          DOUT 2
9988600086           334214       0                      69           Bettary
9988600089           6364         0                      1            Engine
9988600089           6365         0                      2            Digital Input Status 2
9988600089           325346       0                      179          DOUT 1
9988600089           325347       0                      180          DOUT 2
9988600089           334214       0                      69           Bettary
9988600092           6364         0                      1            Engine
9988600092           6365         0                      2            Digital Input Status 2
9988600092           325346       0                      179          DOUT 1
9988600092           325347       0                      180          DOUT 2
9988600092           334214       0                      69           Bettary

就像評論中提到的那樣,我一定會更新我的統計信息。 但是之后,我將查看此索引:

CREATE UNIQUE CLUSTERED INDEX [Message_Object_UK] 
ON [Message] ([ObjectId] ASC, [GpsTime] ASC, [MessageId] ASC)

該查詢執行該討厭的嵌套循環連接,因為它必須查找並找到具有特定messageID的記錄,該記錄必須從Message表索引中的EACH記錄中提取。 嘗試將其更改為:

CREATE UNIQUE CLUSTERED INDEX [Message_Object_UK] 
ON [Message] ([MessageId] ASC, [ObjectId] ASC, [GpsTime] ASC )

這有可能使您獲得哈希或合並聯接

暫無
暫無

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

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