我有一个包含7亿行(每个都有TEXT
字段)和500多个搜索字词的数据库。查找包含至少一个搜索词的所有行并将其插入新表的最快方法是什么?
我的第一个想法是使用以下
INSERT INTO my_new_table
SELECT * FROM my_table WHERE text_field LIKE '%term1%' OR ... OR text_field LIKE '%term500%';
或者Python会更快,类似
cursor.execute("SELECT * FROM mytable")
for row in cursor:
if any(term in row[text_index] for term in search_terms):
write_row_to_csv_or_mysql(row)
或许有更好的方法?
答案 0 :(得分:1)
在7亿行中搜索我认为检索所有数据并在之后搜索(你的python解决方案)是不好的,并且使用类似搜索(你的sql解决方案)进行查询是不好的
基于mysql的更好的解决方案是使用全文搜索,http://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html
这里有一个例子:
SELECT * FROM articles
WHERE MATCH (title,body)
AGAINST ('database' IN NATURAL LANGUAGE MODE);
再次使用像弹性搜索这样的专用dbms更好 https://www.elastic.co 搜索专用数据库通常更快,更具可扩展性。