【发布时间】:2014-01-14 16:45:57
【问题描述】:
SELECT a.id, am.value FROM testA a
JOIN testA_mt am ON am.a_id = a.id
WHERE a.grp = 2 AND a.path GLOB 'foo/bar/*' AND am.key = "keyword"
testA_mt 是一个使用密钥对模型的表。
问题是运行大约需要 1 秒。
根据http://www.sqlite.org/optoverview.html,我的 GLOB 查询应该被优化,因为它满足所有要求的条件。 grp、path 和 key 列都已编入索引,最后我使用的是*。
EXPLAIN QUERY PLAN 看起来不错:
0
0
0
0
1
1
SEARCH TABLE testA_mt AS am USING INDEX am_key (key=?) (~10 rows)
SEARCH TABLE testA_mt AS am USING INDEX am_key (key=?) (~10 rows)
0
0
1
1
0
0
SEARCH TABLE testA AS a USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)
SEARCH TABLE testA AS a USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)
但是为什么这么慢呢? :(
【问题讨论】:
-
testA_mt.a_id上有索引吗? -
是的,它也被索引了
标签: performance sqlite glob