更改SQLITE版本会对我们的查询产生巨大的性能影响。我们观察到一些查询的加速超过25,但与此同时我们观察到其他查询的速度减慢了2。 可能导致这种性能差异的原因是什么?
比较执行时间时,只有执行环境发生变化。相同的硬件,相同的DB,相同的查询。 SQLITE正在通过Perl DBI使用。
查询1的运行时间:
SQLITE 3.8.0(Fedora 19):
real 0m0.674s
user 0m0.650s
sys 0m0.021s
SQLITE 3.7.13(Debian Wheezy):
real 0m17.242s
user 0m17.169s
sys 0m0.028s
查询2的运行时间:
SQLITE 3.8.0(Fedora 19):
real 0m0.303s
user 0m0.284s
sys 0m0.017s
SQLITE 3.7.13(Debian Wheezy):
real 0m0.168s
user 0m0.160s
sys 0m0.007s
不确定它是否有用,但是用于调整数据库的一些参数:
PRAGMA synchronous = OFF
PRAGMA journal_mode = OFF
PRAGMA locking_mode = EXCLUSIVE
PRAGMA temp_store = MEMORY
PRAGMA PAGE_SIZE = 4096
PRAGMA cache_size = 125000
答案 0 :(得分:0)
感谢@CL。的帮助,我访问了提到低质量索引的next generation query planner页面,其中“表格中有超过10行或20行具有相同的值” 。我有一个只包含重复外键的表的索引。删除索引修复了问题。