首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sqlite3连接-过滤排序依据性能

sqlite3连接-过滤排序依据性能
EN

Stack Overflow用户
提问于 2014-11-18 23:34:12
回答 1查看 49关注 0票数 0

我正在尝试对一个sqlite3数据库执行类似的查询:

代码语言:javascript
复制
select node.loc, node.weight from node
inner join filt on (node.id = filt.node_id)
inner join filt T5 on (node.id = T5.node_id)
where (filt.word = 'aaa' and T5.word = 'aasvogel')
order by node.weight desc limit 10;

在mysql上,这样的查询速度很好,速度也很快(<0.2s);在sqlite3上,对于相同的数据,它运行了~2s。

可能的问题是什么?我可以做些什么来提高它的性能?

我用来测试sqlite3的文件可以在这里找到:https://github.com/HoverHell/sqlperftst1

尤其是表的定义:

代码语言:javascript
复制
CREATE TABLE "node" (                        
    "id" integer PRIMARY KEY,                
    "loc" varchar(255) NOT NULL,             
    "weight" real
);
CREATE INDEX "node_loc" ON "node" ("loc");
CREATE INDEX "node_weight" on "node" ("weight");

CREATE TABLE "filt" (
    "id" integer PRIMARY KEY,
    "node_id" integer NOT NULL,
    "word" varchar(120) NOT NULL
);
CREATE INDEX "filt_word" ON "filt" ("word");
CREATE INDEX "filt_node_id" ON "filt" ("node_id");

UPD:真实数据和查询的性能比较:

EN

回答 1

Stack Overflow用户

发布于 2014-11-19 03:52:23

可以通过在用于查找的两个列上创建索引来改进此查询:

代码语言:javascript
复制
CREATE INDEX filt_word_node_id ON file(word, node_id);

然而,tje数据的形状是不寻常的,这使得查询优化器错误地估计了单词查找的选择性。运行ANALYZE来修复此问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26998022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档