什么会更快;在sqlite3数据库表中搜索主键等于特定字符串的行
或
在Python中,我从sqlite3数据库表中获取所有主键(使用查询)作为Python列表,并使用Pythons in 关键字来测试该列表中是否出现特定字符串。 / p>
我想我是在问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我希望行存储的顺序是什么?所以我总是可以按字母顺序排列表中的行(根据主键)?
答案 0 :(得分:3)
每个人的答案“会更快吗?”问题是“自己测试”。
也就是说,答案是SQLite搜索索引的速度比SQLite表扫描加上Python中的O(N)扫描要快。
至于你的“告诉SQLite如何存储行”位,你不希望这样。您可以ORDER BY
按特定顺序检索结果 - 它们存储的方式是一个实现细节。