接下來,我們來研究一下這個問題。
建立表,並使用sdo_geometry資料型別儲存向量資料。
檢視表中記錄數:
建立空間索引:
create index "tddcsde"."a3010_ix1" on "tddcsde"."dltb20150705" ("shape") indextype is "mdsys"."spatial_index"
用乙個經緯度跨度均為1的矩形作為檢索條件
此時執行計畫的
cardinality=14300
,而真實返回的記錄數是多少呢?
顯然,不是執行計畫預計的
14300。
現在我們把查詢範圍變大,設定
緯度跨度均為
2的矩形作為檢索條件
現在我們的查詢範圍變大了,但是
cardinality
仍然為14300
。而此時返回的真實記錄數是多少呢?
確實比經緯度跨度為
1的矩形返回的記錄多,但即使如此,執行計畫的
cardinality
與之前一致。
到現在為止,我們看到的是結果:不同空間範圍進行空間查詢,其
cardinality
值不變化。那現在不禁要問,這個值是怎麼計算得到的呢?那就得分析
10053
事件。
分析tddc_ora_8438.trc
檔案,發現
cardinality
的計算方法如下:
從該plsql block
中可以發現,空間查詢範圍作為輸入資訊代入到**段中去,最終得到的選擇率為
1/100
。單從計算方法上看,似乎查詢範圍會影響到最終的
selectivity
計算結果,便其實並非如此。我們把範圍再次從
1度的跨度變為
2度的跨度,然後得到
10053
的trc
分析tddc_ora_8525.trc
檔案
範圍變大了,但選擇度仍然為
1/100
。我們再次回到前面的例子中,
預計的cardinality為14300,
而dltb20150705
表的記錄數,根據之前的查詢,為:
而14300 = round(1430023 * 0.01)
結論:1、
sdo_anyinteract
操作符的選擇度恆定為
1/100
。其它操作符的選擇度有待驗證。
oracle spatial空間型別建立
oracle spatial空間型別建立 使用oracle11g建立空間表資料,基於oracle spatial的儲存方式,通過這種儲存方式的幾何列shape的字段型別為mdsys.sdo geometry型別,個人覺得關於操作空間資料的sql語句來說,相交於postgresql ms sqlser...
oracle spatial 空間資料學習
最近專案使用 空間資料庫 oracle spatial 建立測試用表 create table spatialtest id varchar2 20 not null,name varchar2 100 address varchar2 200 telephone varchar2 50 locat...
Oracle spatial建立空間資料的字段詳解
oracle spatial oracle spatial主要通過 sdo geometry 來儲存空間資訊,主要有五個引數 sdo gtype number sdo srid number sdo point sdo point type sdo elem info mdsys.sdo elem ...