Lucene代替SQL Server NewGuid获取随机结果

站点中有个随机获取的功能用了SQL Server 的NewGuid来实现。

不知道MSSQL内部是怎么实现的,总之相当慢,我机子上一般光查询就用去140ms+(搜索数据2k+,数据总数12k+),服务器就200ms+至少了,记录数可以说已经很少了,真不知道那些几万数据的随机是怎么搞的,如果有哪位高人希望能指点下。

正好站点内用了lucene,想到它的索引一直是放内存的(不是整个索引,简化的),如果来guid下肯定快,因为它就两个字段一个doc:int+score:float

Lucene.Net version :2.9.2

我的实践是先用MatchAllDocsQuery来获取所有结果,然后linq随机计算得出所有ID然后扔给SQL,代码如下:


var query = new MyQuery();
query.WithAll();
var results=IndexConfig.RealTimeSearch.SearchIndex(query.Query);
results.Documents = results.Documents.OrderBy(d => Guid.NewGuid()).Take(25);

SQL查询:


select id,xx1,xx2 from table where id in (id1,id2,id3);//idN 就是刚才linq计算的结果。

本地测试结果大概在50ms左右,基本就是SQL查询的时间!



本文转自today4king博客园博客,原文链接:http://www.cnblogs.com/jinzhao/archive/2011/09/19/2181409.html,如需转载请自行联系原作者

上一篇:Querying Microsoft SQL Server 2012 读书笔记:查询和管理XML数据 1 -使用FOR XML返回XML结果集


下一篇:浅析SQL查询语句未显式指定排序方式,无法保证同样的查询每次排序结果都一致的原因