<p>根据你的回答,我做了两件事@Tomalak。
我使用sqlitebrowser在sqlite bdd中创建并保存了一个专用表,此代码仅包含我需要的数据:</p>
<pre><code>CREATE table res AS SELECT
c.number, c.name, c.artist, fd.name AS local_name, fd.language, st.name as local_print
FROM
cards AS c
LEFT JOIN foreign_data AS fd ON fd.uuid = c.uuid
LEFT JOIN sets AS st ON st.code = c.setCode
WHERE
fd.language IS NULL OR fd.language = "French"
</code></pre>
<p>然后,我使用FTS4在python中调用它,并连续执行两个请求,以测量一个请求的虚拟表初始化时间,然后使用相同的virtualtable测量单个请求的时间:</p>
<pre><code>import sqlite3
import time
init = time.time()
keyVal ="Act of Treason"
conn = sqlite3.connect(r"AllPrintings.sqlite")
conn.create_function("SIMILAR", 2, similar)
cur = conn.cursor()
cur.execute('''DROP TABLE IF EXISTS mtgsearch''')
cur.execute('''CREATE VIRTUAL TABLE mtgsearch USING fts4(number, name, artist, namefr, language, local_print)''')
cur.execute('''INSERT INTO mtgsearch(number, name, artist, namefr, language, local_print) SELECT c.number AS number, c.name AS name, c.artist AS artist, c.local_name AS namefr, c.language AS language, c.local_print AS local_print FROM res AS c''')
conn.commit()
stock = cur.execute('''SELECT * FROM mtgsearch WHERE name= ?''',[keyVal])
for row in stock:
print(row[0], row[1], row[2], row[3], row[4], row[5])
print(time.time() - init)
init = time.time()
keyVal= "Air Elemental"
stock = cur.execute('''SELECT * FROM mtgsearch WHERE name= ?''',[keyVal])
for row in stock:
print(row[0], row[1], row[2], row[3], row[4], row[5])
print(time.time() - init)
</code></pre>
<p>与之前相比,结果令人兴奋==>;第一个结果是0.4秒,第二个结果是0.015秒</p>
<p>如果我使用Sequencematcher,第一个请求将在1.7秒内发出,第二个请求将在1.3秒内发出。所以下一个目标是找到一种改进更快相似性算法的方法。有什么想法吗</p>
<p>无论如何谢谢你的帮助,我学到了很多关于SQLite的知识。我对写第一篇文章一无所知</p>