lucene3 5與mysql 查詢效能的對比

2021-06-12 18:30:08 字數 2531 閱讀 5735

由於最近做畢設,需要做乙個商品查詢模組,用到了lucene來做商品索引的查詢,原因為:

1.marks(商品標籤)字段含有多個標籤,當針對某個標籤查詢時,或許只能用like 查詢,這樣的查詢慢!

2.沒用過lucene,想用來測試下效能

可能結果早就顯而易見,但是這次測試我要的是資料,不僅僅是結果,所以別說什麼你們知道答案類似的話~

言歸正傳,我的設計是這樣的:

而,效能對比,對比的就是搜尋條件,是在lucene快,還是直接去mysql快!

我的lucene模組提供了兩種索引方式,

一種是建立索引在檔案中,需要查詢時在索引檔案中去查詢

二是在記憶體中建立索引,需要時直接再記憶體中查詢

由於第二種方式明顯快於第一種(設計第一種的原因是,索引僅僅在記憶體是不夠的,需要持久化,不能每次都重新拉資料再建立索引),所以僅僅是放上測試資料,僅作對比!

說明:1.mysql只有主鍵索引,marks欄位建有索引,但是通過

explain  select * from t_baobei   t where     t.baobeimarks like '%手'  ;

explain  select * from t_baobei   t where     t.baobeimarks like '%手%'  ;

explain  select * from t_baobei   t where     t.baobeimarks like '手%'  ;

三種情況確認,該sql語句沒有用到索引

2.lucene分詞器用的是

standardanalyzer()

測試1: (1w條資料)

建立索引在檔案中:

index's num is 10000

create  use : 1953 ms

search  use : 

547ms

建立索引在記憶體中:

index's num is 10000

create  use : 1046 ms

search  use : 94

ms

mysql中:

sql 語句為 

select * from t_baobei t  where t.baobeimarks like   '%手機%'

search  use : 

16ms --40ms

測試2: (3w條資料)

建立索引在檔案中:

第一次index's num is 30000

create  use : 2641 ms

search  use : 609ms

第二次          

index's num is 30000

create  use : 3063 ms

search  use : 563ms

第三次index's num is 30000

create  use : 3704 ms

search  use : 547ms

第四次:刪除已有索引,索引大小3m

index's num is 30000

create  use : 2500 ms

search  use : 531ms

可以看出:

1.建立索引的耗時隨記錄數的增加而增加,3w條資料的平均耗時為3s以上,資料量是原來的3倍,耗時自是1.5倍          

2.從1w到3w,搜尋耗時增加不大

建立索引在記憶體中:

index's num is 30000

create  use : 1687 ms

search  use : ~94 

ms(搜尋'手');

search  use : ~110 

ms(搜尋'手機');

可以看出:

1.和1w資料在記憶體中建立和搜尋比,資料量是原來的3倍,建立耗時是原來1.5倍,搜尋耗時比本沒有差別

2.和在檔案中建立和搜尋索引比,同樣的資料量(3w),建立耗時減少一半,搜尋耗時,減少乙個數量級!!

3.和mysql 相比四種like方式來說,基本沒有競爭優勢,除最耗時的第一條sql外,其餘mysql均只有lucene的20%

mysql中:

* (30000條資料)

[sql] select * from t_baobei t  where t.baobeimarks like   '%手%'

[sql] select * from t_baobei t  where t.baobeimarks like   '手%'

[sql] select * from t_baobei t  where t.baobeimarks like   '%手機%'

--40ms

[sql] select * from t_baobei t  where t.baobeimarks like   '手機%'

--40ms

ps: 發現乙個有趣的現象,不同的like方式的寫法,搜尋時間差距這麼大.字元越少,%越多,粒度就越細.耗時越嚴重

大小: 23.6 kb

4 學習Lucene3 5之索引刪除 更新

1 刪除索引 刪除索引 public void deleteindex catch ioexception e finally 2 恢復刪除索引 恢復刪除的索引 從 站 中恢復 public void restoreindex catch ioexception e finally catch io...

Lucene3 5 實現建立索引和搜尋例項

1.資料庫作為資料來源,建立索引 建立索引 public void createindex openmode openmode,listlist catch exception e listlist new persistencefacade query from authors where id ...

Lucene3 5 的索引的建立,刪除,更新,加權

注意 在涉及到刪除,更改之類的改變索引的操作時,要先重新建立一遍索引,然後再執行相關方法才可以看到效果,否則索引仍然是之前的 1.索引的建立 1 第一步先建立模擬的內容,用於建立索引 private string ids private string names private string con...