基于數據庫的空間索引方式,與前兩種索引方式有著本質的不同,比如,存儲方式、實現手段等。
1.索引實質不同
如果說基于文件的索引主要是優化I/O,基于內存的索引主要是優化CPU計算量,那么基于數據庫的索引則既要優化I/O,又要優化CPU計算量。在基于文件的索引和基于內存的索引的實現過程中,程序員可以從數據結構,存儲結構等多方面靈活控制實現的細節,而且大部分的工作都集中在數據結構,存儲結構的設計上。但是,在基于數據庫的索引中,由于數據庫系統本身高度封裝,用戶調用接口集中在SQL語言的使用,對數據全部操作都是通過SQL調用實現的。對于同一個目的可以編寫出不同的SQL語句,但不同語句間的執行效率是有很大差別的。所以,基于數據庫的索引,實質上是基于數據庫的SQL語言優化,通過適當的表結構設計,表索引設計,以及SQL査詢的設計,達到對空間數據的快速檢索。對于基于文件的索引和基于內存的索引,都是用結構來適應算法,而對于基于數據庫的索引,是用算法來適應結構。所以,研究的起始點不同,在基于數據庫的空間索引中,必須從一定的表結構出發,從訪問SQL語句的優先級別人手,加以研究。
2.基于數據庫的空間索引的特點
添加微信好友, 獲取更多信息
復制微信號
無須對原始數據進行結啕調整?;谖募乃饕话阋獙鲜紨祿募M行預處理,最終按照自己設計的文件格式存儲數據。
通用性強。一是指所有數據庫的訪問方式都基本類似,使用標準的SQL語言,而基于文件方式下,不能保證訪問的通用性。二是指對要被索引的空間數據表的格式沒有具體的要求,這樣對于一般的其他行業的表也可以適用。
在一定程度降低了索引設計的復雜度。因為SQL對于基本類型的數據都提供了強大的操作支持,所以就簡化了很多工作。比如說,排重處理是索引設計中很重要的一個環節,但使用SQL語句設計索引,可能就不需要額外的排重處理。比如,語句Seiect * from SpatialTable Where ID IN(1,8,9) 和語句Select * from SpatialTable Where ID IN(1,8,9,1,9),執行結果和效率都是一樣的。所以在這種情況下就不需要排重處理。
在某些方面又增加了索引設計的復雜度。因為SQL本身是一種結構化語言,很難處理過程化的東西。比如,SQL中不易處理嵌套循環,不能處理條件判斷等。這在一定程度上增加了索引設計的難度和復雜度。另外還有很重要的一點,SQL語句有一定的長度限制,這在設計索引中也是不得不考慮的問題。
來源:開源地理空間基金會中文分會
來源鏈接:https://www.osgeo.cn/post/17b52
本站聲明:網站內容來源于 *** ,如有侵權,請聯系我們,我們將及時處理。