jblzg的技术园

关注基于.Net的Web解决方案,高性能数据库设计,高性能Web服务解决方案,关注移动开发

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  22 随笔 :: 0 文章 :: 356 评论 :: 11万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

对于数据量大(索引文件大于50M)的索引,尽量不要用索引中的字段排序,要用索引ID排序(INDEXORDER);两者效率相差近10倍,以下从内存占用与CPU处理时间来比较:

内存占用比较:
图一:使用整型的唯一标识字段排序


图二:使用索引ID(INDEXORDER)排序


拿占用内存最多的对象来比较:我们可以看到,图一比图二多 2,900,766 bytes(索引文件大小:61M)

处理时间比较:
使用整型的唯一标识字段排序的处理时间是3016ms,使用索引ID(INDEXORDER)排序的时间是303ms

解决方法:
为了能够使索引ID倒序等同于时间倒序:在建立索引时,就要按照数据的时间顺序建立,老的数据先索引,新的数据后索引
倒序代码:

//以下代码基于Incubating-Apache-Lucene.Net-2.0-004-11Mar07
Hits hits = searcher.Search(query, new Sort(new SortField(null, SortField.DOC, true)));

参考:http://markmail.org/message/noq4kohwipx5wzfo#query:Sort.INDEXORDER+page:1+mid:4ydkfgdj6kbvhq2x+state:results

posted on   jblzg  阅读(9643)  评论(19编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示