更快的方法是:在sqlite3数据库表中搜索主键等于特定字符串的行
或者
在Python中,我从sqlite3数据库表(使用查询)中获取所有主键作为Python列表,并使用Pythons-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以特定顺序检索结果—存储结果的方式是实现细节。

10-06 03:18
查看更多