好吧,在我開始之前我想說,我對這個Sql索引來說是全新的東西。在沒有連接和可預測查詢的表上進行Sql Server索引
我有一個不加入任何東西的表格。它有以下列:
Id (int)
String1 (nvarchar(10)
String2 (nvarchar(50)
DateTime1 (date)
DateTime2 (date)
DateTime3 (date)
我在該表上有大約100,000,000行。搜索它很慢,所以我想我必須添加一些索引。
我將只運行以下查詢:
查詢1
select * from Table
where String1 = "Blah" and
String 2 = "Blah" and
DateTime1 <= {someTime1} and
DateTime2 >= {someTime1}
查詢2
select * from Table
where String1 = "Blah" and
String 2 = "Blah" and
DateTime2 >= {someTime1}
查詢3
select * from Table
where String1 = "Blah" and
String 2 = "Blah" and
DateTime3 >= {someTime1}
請注意,他們幾乎是相同的查詢,除了他們有一個稍微不同的日期比較。另外,排序不是問題。
所以我嘗試在列String1,String2,DateTime1,DateTime2上添加一個非聚集索引。運行查詢1這裏是我所看到的:
- 它是快了很多了,但是仍然需要大約20秒加載。
- 我注意到,對於相同的完全相同的查詢(具有相同的搜索參數),如果我再次調用它,它將在不到一秒鐘內返回數據。
- 我注意到,如果我運行查詢1與其他一些參數,它將再次需要20秒加載。
- 我注意到我的RAM上升並在查詢後保持。
因此,這裏是我的問題:
- 我這樣做對嗎?爲什麼需要20秒才能加載?添加索引後不應該很快嗎?
- 什麼是Sql服務器與我的RAM?因爲我有一張大桌子,我需要更多的RAM嗎?
- 我是否需要爲查詢2和查詢3添加新的索引?或者是我添加的索引已經足夠用於其他2個查詢?
感謝,
馳
你知道,我讀過很多SQL的問題。這是一個很好的問題。榮譽。 – Matt 2010-11-02 22:22:35