2012-04-17 103 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

还需要一段时间的原因是,我们需要创建一个查询运行的指数,如果一个已不存在。 即使没有文档,我们仍然需要做一些准备工作。特别是,编制索引通常是最昂贵的部分。