2016-07-28 56 views
0

这是我的SQLite DB。我应该为这个选择的最快性能创建哪些索引,并且我的选择是否正确?我应该为我的选择使用哪些索引,DB

select way_id,way_pos,lat,lon,tag 
from way_nodes 
join nodes using(node_id) 
join ways_tags using(way_id) 
where lat < someValue1 
and lat > someValue2 
and lon < someValue3 
and lon > someValue4 
order by way_nodes.way_id, way_pos; 

现在,这个选择花了40秒(多于100万个节点,140万个way_nodes,cca 100 000个方法)。即时通讯只使用选择,所以我不在乎如果指数缓慢更新,..

+0

请显示数据库模式。 –

+0

第一行有链接。 https://s32.postimg.org/fr2ycrtf9/image.png –

回答

0

要找出哪些指标估计是实际有用的,use EXPLAIN QUERY PLAN

使用lat和/或lon上的索引可能无济于事。

除了使用为此设计的索引,即R-tree之外,没有好的方法来优化多维间隔查询。

+0

我正在尝试所有可能的索引组合,不知何故我减少到800毫秒,但我删除它,现在我不知道哪些索引工作。 –

+0

如果我将表节点,ways_nodes,ways_tags连接成一个更大的节点呢?我应该使用哪些指标? –