【问题标题】:Fastest way to search MySQL Text for multiple terms: MySQL vs Python在 MySQL 文本中搜索多个术语的最快方法:MySQL 与 Python
【发布时间】:2016-07-05 20:50:40
【问题描述】:

我有一个包含 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)

或者也许有更好的方法?

【问题讨论】:

  • 你可以计时代码来找出答案
  • 第一个评论是对的!你问“如何管理数据”,这不是 python 问题。
  • @PadraicCunningham 我意识到这一点,但你会如何安排我问“也许有更好的方法?”的部分。我发布了 SQL 查询和 Python 代码,以表明我正在尝试一些事情,而不仅仅是盲目地寻求解决方案。此外,两者的时间安排不会提供第一个答案中建议的全文搜索选项。

标签: python mysql


【解决方案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 搜索专用数据库通常更快且更具可扩展性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-03
    • 2013-09-04
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    相关资源
    最近更新 更多