在SQLite3表中搜索特定行,使用Python更快吗
什么会更快呢?是在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
来按照特定顺序获取结果——数据是怎么存储的,这属于实现的细节。