python - 在 SQLite3 表中搜索特定行还是使用 Python 更快

标签 python sql algorithm sqlite

什么会更快;在 sqlite3 数据库表中搜索主键等于特定字符串的行

在 Python 中,我从 sqlite3 数据库表(使用查询)中获取所有主键作为 Python 列表,并使用 Python 的 in 关键字来测试特定字符串是否出现在该列表中。

我想我问的是 SQLite3 是否采用更高级的算法来查找具有我正在搜索的主键的特定行,或者我自己获取所有主键并使用 python 搜索会更快(或一旦我得到它们就使用我自己的二进制搜索)?

两种方式的代码:

import sqlite3
conn = sqlite3.connect("d.db")
cur = conn.cursor()
isPresent = cur.execute( "SELECT target FROM stringList WHERE target='specificString';" ).fetchall()
return isPresent == None

// Alternate
primaryKeyList = cur.execute( "SELECT target FROM stringList;" ).fetchall()
return 'specificString' in primaryKeyList 

// Or I can sort the list then use a binary search or other fast algorithm
primaryKeyList = cur.execute( "SELECT target FROM stringList;" ).fetchall()
//..sort primaryKeyList
primaryKeyList = sortList(primaryKeyList)
return binarySearch('specificString') == True 

PS:有没有办法告诉 SQLite3 我希望以什么顺序存储行?所以我总是可以让表中的行按字母顺序排序(根据它们的主键)?

最佳答案

每个“它会更快吗?”的答案问题是“自己测试”。

也就是说,答案是 SQLite 在索引上的搜索将比 SQLite 表扫描加上 Python 中的 O(N) 扫描更快。

至于你的“告诉 SQLite 如何存储行”位,你不想要那个。您可以执行 ORDER BY 以按特定顺序检索结果 - 它们存储的方式是一个实现细节。

关于python - 在 SQLite3 表中搜索特定行还是使用 Python 更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9014056/

相关文章:

具有 3 列键的 Java Map

python - 使用最小二乘法拟合权重衰减回归中的偏差

python - Scrapy Splash 点击按钮不起作用

sql - 选择与另一个日期最接近的日期

c# - 带有参数的 Cosmosdb documentdb Sql 查询返回 0 个项目

python - 如何自动填充相关问题

c - strncpy 产生奇怪的输出

python - 在不删除行的情况下过滤 Pandas DataFrame

python - 如何在 Python 中使用 BeautifulSoup 分离标签?

mysql - 如何将一列的值复制到同一行中的另一列?