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
出处:https://www.cnblogs.com/jinzhao/archive/2011/09/19/2181409.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2009-09-19 页面中文乱码问题收集(原创)