2013-07-27 283 views
5

我有一個mysql數據庫,用戶可以在其中輸入文本。然後他們需要能夠搜索這個文本。我剛剛實施了mysql全文搜索,它確實使搜索速度更快。MySQL全文搜索:需要快速插入和快速搜索

然而,毫不奇怪,它使插入速度變慢。但我感到驚訝的是速度有多慢。一個插入可以花費0.5-1.5秒。

表有3個索引列:

title (max length 200) 
description (max length 3000) 
content (max length 10000) 

我只有在表在這一點上,這是沒有什麼比它稍後會約2000條記錄。

有什麼建議嗎?這個問題通常如何處理?插入件花費這麼久是否正常?

我不需要全文搜索的全部功能。我真的只需要相當於AND,OR, - ,+,「」。所以沒有重量等。該索引可以轉向,使其更快?

+7

MySQL的'FULLTEXT'指標,憑藉的事實,他們總是與數據同步,確實會減慢寫入表格的速度。有第三方解決方案,如[Solr](http://lucene.apache.org/solr/)或[Sphinx](http://sphinxsearch.com/),它們連接到您的數據庫並構建自己的索引(與數據修改分開),因此不會影響MySQL的寫入性能。 Bill Karwin的演講[Full Text Search Throwdown](http://www.slideshare.net/billkarwin/practical-full-text-search-with-my-sql)是一個很好的選項比較。 – eggyal

+0

剛剛安裝了獅身人面像。這很棒。使用rt索引。快速插入和搜索。 – user984003

回答

2

基於eggyal的評論的答案。

我結束了安裝Sphinx。這很棒。我正在使用它的實時索引。快速搜索和快速插入。比mysql自由文本插入/搜索更快。當然,我的數據庫非常小。他們利用大型數據庫實現快速實時索引技巧(分爲兩個索引,一個包含舊數據,一個包含較新數據),但我並不需要這些索引。

BTW:我使用Python/Django和沒有不需要安裝任何API或圖書館,除了獅身人面像本身:

import MySQLdb 
connection = MySQLdb.connect(host='127.0.0.1', port = 9306) 
cursor = connection.cursor() 
cursor.execute("select id from my_index where match('stackoverflow')") 
results = cursor.fetchall() 
# I use my regular connection to insert the IDs into a table in my regular database and then join with that to get actual data.