2016-07-28 54 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連接成一個更大的節點呢?我應該使用哪些指標? –