在SQLite3表中搜索特定行,使用Python更快吗

0 投票
1 回答
1680 浏览
提问于 2025-04-17 11:07

什么会更快呢?是在sqlite3数据库表中查找一个主键等于特定字符串的行,

还是

在Python中,我从sqlite3数据库表中获取所有主键(通过查询),然后用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 

顺便问一下,有没有办法告诉SQLite3我想要以什么顺序存储行?这样我就可以让表中的行按字母顺序(根据它们的主键)排列。

1 个回答

3

每当有人问“这样做会更快吗?”时,答案都是“自己测试一下”。

不过,简单来说,SQLite在索引上搜索会比在SQLite表中扫描再加上Python中的O(N)扫描要快。

至于你提到的“告诉SQLite怎么存储行”的部分,其实你不需要这样做。你可以使用ORDER BY来按照特定顺序获取结果——数据是怎么存储的,这属于实现的细节。

撰写回答