2013-07-27 249 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.