温馨提示:本文翻译自stackoverflow.com,查看原文请点击:python - Search for many rows with many distinct values
mysql python sql

python - 搜索具有许多不同值的许多行

发布于 2020-03-29 22:02:46

我正在寻找在MySQL中实现缓存的方法。我这样做是因为我正在开发的应用程序需要缓存,但没有持久性。

我正在收集文件的SHA-1校验和。用户可以向我提供校验和的列表,我需要返回给他们我数据库中没有的校验和。我期望数据库中校验和的数量约为一百万,而要检查的值的数量约为十万。

天真的方法是发布一长串的

SELECT COUNT(*) FROM myTable WHERE checksum = '2fd4e1c67a2d28fced849ee1bb76e7391b93eb12';

通过使用在Python连接器中使用参数的功能,可以对此进行某种程度的优化。但是,这似乎在python进程和MySQL进程之间的连接上引起了很大的反响。

我知道有一种方法与相似SELECT checksum FROM myTable NOT IN (SELECT someOtherTable WHERE someClause),除了我要检查的校验和列表在我的Python进程中而不是MySQL表中之外,这与我需要的匹配。

查找不在列表中的校验和的最佳方法是什么(该列表最初仅在我的Python进程中可用)(因此必须通过IPC将其共享给MySQL)?

查看更多

提问者
Cort Ammon
被浏览
16
Akina 2020-01-31 13:03

您的表必须具有按校验和字段的索引。

当用户提供校验和列表时,您必须创建临时表,将这些值存储在其中,通过shecksum字段构建索引,并使用带有SOIN的sommon简单查询进行搜索。

插入要搜索的值列表的最快方法是将它们保存到texst文件中,然后使用LOAD DATA INFILE加载到临时表中。如果客户端具有足够的权限在MySQL的服务器文件系统中创建文件,则适用。

如果不可能,则按块插入值。