2012-04-17 72 views
2

我剛剛在刪除數據文件夾後啓動了一個新的RavenDB服務器。所以,我有一個空的數據庫。我在LinqPad中運行了這個查詢。第一次花了19秒,第二次花了13秒。爲什麼在一個空的數據庫上這麼長時間?RavenDB用空數據庫緩慢查詢

Session.Query<PerformanceMetric>() 
.Where(x => x.CreatedTime > new DateTime(2012, 4, 17, 15, 00, 00)) 
.OrderBy(x => x.ObjectType) 
.OrderBy(x => x.CreatedTime) 
.Take(1000) 
.ToList().Dump(); 

注意:第三次和第四次我跑查詢,它只花了0.02秒。是建立索引還是什麼?

+0

我的猜測是建立索引。您是否嘗試過在創建查詢之前創建索引? – Rangoric 2012-04-17 19:46:51

+0

這是一個好主意。我會嘗試的。 – 2012-04-17 19:51:22

+0

我在查詢之前添加了索引,並且它運行得很快。那一定是吧。有趣的是,構建索引並在空數據庫上返回查詢需要很長時間。如果你想發佈你的答案,我會接受它。 – 2012-04-17 20:07:24

回答

3

我最好的猜測是時間是建立索引。當你沒有提前創建索引時,RavenDB會讓你繼續查詢隨機事件,它只會爲你創建一個索引,如果你足夠使用它,它會保持它。

嘗試提前創建索引,並查看它將如何工作。

更多信息可以在這裏得到:http://ayende.com/blog/4667/ravens-dynamic-queries

3

還需要一段時間的原因是,我們需要創建一個查詢運行的指數,如果一個已不存在。 即使沒有文檔,我們仍然需要做一些準備工作。特別是,編制索引通常是最昂貴的部分。