2011-02-07 37 views
0

我正在設計一個數據庫來存儲地理位置。我想實現與Google地圖類似的功能。使用場景是,我有很多點,和相關的X,Y位置。數據庫很少更新(例如添加新點或修改現有點的X,Y位置),但頻繁查詢。查詢方案是,對於給定的正方形(正方形的4個角點X,Y位置已知),查找正方形中的所有點和相關的X,Y位置。數據庫設計性能問題徵求意見

我想知道如何設計數據庫,以便查詢性能得到優化。我的設計問題與地圖數據庫設計非常相似。我也想知道Google Map或傳統地圖數據庫是否實現了最佳性能?

我是新來的地圖數據庫設計領域,如果有人可以參考一些教程爲新手感謝。

由於事先 喬治

回答

1

喬治, 你會

where (geoX between %x1 and %x2) and (geoY between %Y1 and %y2) 

關於索引找到自己的位置,因爲你可能總是會爲X和Y查詢一個單一的指標就可以了: idx_XY(健樂士,GEOY)

如果有任何需要尋找的只是Y,添加第二個索引

idx_Y (geoY) 

(而且我重命名X/Y長/ LAT,但是這或多或少是個人的事,;-)

問候, /噸

+0

謝謝@ user247245!對於你發佈的查詢,爲什麼它會在(X,Y)上使用索引?我的困惑是我認爲(%x1和%x2之間的geoX)將使用索引X,(%Y1和%y2之間的geoY)將使用索引Y.那麼,我應該在X上創建索引並且在Y上創建索引?如果我錯了,請隨時糾正我。 – George2

+0

有沒有更新? :-) – George2

+1

複合索引(X,Y)將更快地過濾。如果構建爲(x,Y),則DBMS將首先搜索X,然後在舊版電話聖經中搜索Y,就如同姓氏一樣。僅在請求Y範圍時才需要Y索引,因爲那樣X,Y索引將不起作用。想想它,因爲你不能在電話簿中輕鬆找到所有「桑德拉」,你需要另一個「註冊」。尊敬// t – Teson

1

你綁到一些現有的後端數據庫?有些數據庫(如MongoDBPostgreSQL)有此功能已經內置的。

+0

感謝亞歷克斯,我不能用現有的你提到的DB。對於遺留系統的原因,我必須自己從頭開始設計。我基於SQL Server或Oracle數據庫(傳統應用程序使用混合數據庫系統)。因此,我想了解關於MongoDB或PostgreSQL如何實現地圖數據庫的想法,然後我可以在我的遺留應用程序中使用類似的想法(可能比它們簡單)。你有關於如何設計地圖數據庫的推薦教程嗎? – George2

+1

在最簡單的實現中,如果您不需要知道點之間的距離或擔心真正的圓形半徑搜索,那麼它只是一個邊界檢查,如「select * from table where lat> x1 and lat y1和lon

+0

我應該在x和y列上創建索引嗎?如果是,如何創建索引(例如,在x上創建一個索引,在y上創建另一個索引;或者在x,y兩列上創建索引),以便索引用於加速查詢上述4個條件?感謝您能否參考一些關於如何設計GIS數據庫的一般想法的教程,以便在設計和實施之前瞭解更多背景知識。 – George2