在python中检查数以百万计的mysql行

velaa5lx  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(358)

我有一个python程序,它下载了一个超过1亿个唯一值的文本文件,并遵循以下逻辑:
如果该值已存在于表中,请更新条目的 last_seen 日期( SELECT id WHERE <col> = <value>; )
如果表中不存在该值,请将该值插入表中
我对需要添加的条目进行排队,然后在收集了几百个条目之后将它们插入到一个bulk语句中。
目前,该程序需要24小时才能运行。我在存储值的列上创建了一个索引。
我目前正在使用mysqldb。
检查值是否存在似乎占据了运行时的大部分份额。我可以通过什么途径加快速度?
谢谢您。

4ngedf3f

4ngedf3f1#

您可以尝试将这些值加载到一个集合中,这样就可以进行查找,而无需每次都从数据库中提取数据。假设表没有被其他人更新,并且您有足够的内存。


# Let's assume you have a function runquery, that executes the

# provided statement and returns a collection of values as strings.

existing_values = set(runquery('SELECT DISTINCT value FROM table'))

with open('big_file.txt') as f:
    inserts = []
    updates = []
    for line in f:
        value = line.strip()
        if value in existing_values:
            updates.append(value)
        else:
            existing_values.add(value)
            inserts.append(value)
        if len(inserts) > THRESHOLD or len(updates) > THRESHOLD:
            # Do bulk updates and clear inserts and updates

相关问题