長期以來,我們一直有乙個深分頁問題。如果直接跳到很靠後的頁數,查詢速度會比較慢。這是因為solr的需要為查詢從開始遍歷所有資料。直到solr的4.7這個問題一直沒有乙個很好的解決方案。與最近發布的solr的版本中,solr使用了所謂的游標大幅度提高深翻頁的效能。
問題深分頁的問題是很清楚。solr必須為返回的搜尋結果準備乙個列表,並返回它的一部分。如果該部分**於該列表的前面並不難。但如果我們想返回第10000頁(每頁20條記錄)的資料,solr需要準備乙個包含大小為200000(10000 * 20)的列表。這樣,它不僅需要時間,還需要記憶體。
令人高興的是,solr 4.7的發布改變了這一狀況,引入了游標的概念。游標是乙個動態結構,不需要儲存在伺服器上。游標包含了查詢的結果的偏移量,因此,solr的不再需要每次從頭開始遍歷結果直到我們想要的記錄,游標的功能可以大幅提公升深翻頁的效能。但是是以消耗記憶體為代價的。(據個人測算10g的索引需要jvm為3.5g左右)。
用法游標的使用非常簡單。在第乙個查詢中,我們需要傳遞乙個額外的引數- cursormark = *,告訴solr返回游標。在返回中除了搜尋結果,我們還可以得到nextcursormark資訊。看看下面這個例子。
例如:
總結
solr的4.7引入的這個游標引數非常簡單,大大提公升了翻頁的效果
詳細的測試報告看這裡:
使用WITH提高查詢效率
前兩天的業務需求裡需要關聯好幾張表出乙個詳單報表,這個需求其實很簡單,但是資料量大,源表又不是分割槽表,就變得很頭疼了。最初我的 大概是這樣子的 select a.id,a.name,a.code,b.type,select p name from c c where c.pid b.pid fro...
使用WITH提高查詢效率
前兩天的業務需求裡需要關聯好幾張表出乙個詳單報表,這個需求其實很簡單,但是資料量大,源表又不是分割槽表,就變得很頭疼了。最初我的 大概是這樣子的 select a.id,a.name,a.code,b.type,select p name from c c where c.pid b.pid fro...
增加索引提高查詢效率
有個分頁,跳轉頁面後執行語句大致如下 select from v bidding group product where id in select top 400 id from v bidding group product where biddingid 50515 order by id an...