GanosBase在時空索引架構基礎上進行的深度最佳化,可減少時空查詢中額外的資料I/O及計算開銷。
背景資訊
時空引擎傳統的查詢都是經典的兩階段查詢處理方法(粗糙集過濾和精確過濾),首先利用時空多維索引進行粗糙集過濾,篩選出來的中間結果集再經過精確函數判斷,得到最終的結果集。
樣本
先利用test表上的空間索引與查詢對象進行粗過濾,得到中間結果集ID,根據中間結果集ID再取出實際的記錄資料,利用st_intersects進行精確過濾,最終得到合格記錄集。
這其中,利用空間索引進行粗糙集過濾後,依舊有大量無關的對象需要進入到精確過濾階段,一方面帶來資料I/O開銷,另一方面由於精確過濾計算過於複雜,會帶來大量無用計算。
select id from test where st_intersects(ST_GeomFromText('POLYGON((250000 -268000, 250000 270000, 280000 270000,280000 -268000, 250000 -268000))', 3857),geom)=true;兩階段查詢最佳化
兩階段查詢最佳化對於時空範圍查詢、PIP(point in polygon)查詢等情境有較大的效能提升,該最佳化由PolarDB中的guc參數控制,對使用者使用透明,當前預設為關閉狀態。
在資料庫session中開啟或關閉查詢最佳化的命令如下:
-- 開啟
set polar_enable_gist_refine = true;
-- 關閉
set polar_enable_gist_refine = false;