背景
我有一个SQLite数据库。该数据库有两个表:键和元素。
CREATE TABLE keys (id INTEGER PRIMARY KEY, key TEXT)
CREATE TABLE elements (key_id INTEGER, element TEXT)
示例键:
示例元素:
计数:
我根据这个数据库生成文本:
cursor.execute("""
SELECT id
FROM keys
WHERE key = ?
""", (key,))
key_id = cursor.fetchone()[0]
cursor.execute("""
SELECT element
FROM elements
WHERE key_id = ?
""", (key_id,))
elements = cursor.fetchall()
word = "".join(random.choice(elements))
此代码执行10-20次。但它太慢了。一代可能需要20-30秒。
问题:
答案 0 :(得分:0)
要加快第一个查询的效果,您可以向key
列添加索引。同样,为了加快第二个查询,您可以在key_id
上添加索引:
CREATE INDEX key_idx ON keys (key);
CREATE INDEX elmt_idx ON element (key_id);
这将有助于两个查询中的WHERE
子句找到您要返回的记录。
至于你的第二个问题,你当前的设计,每个键和值在一个单独的行,可能是最好的方式去这里。首先,它使查找给定值更容易。例如,如果要将值存储为以逗号分隔的数据,则筛选值会更加困难。你将无法利用任何索引。