-
ROLLUP 最根本的作用是提高某些查詢的查詢效率(無論是通過聚合來減少數據量,還是修改列順序以匹配前綴索引)。因此 ROLLUP 的含義已經超出了“上卷”的范圍。這也是為什么在源代碼中,將其命名為 Materialized Index(物化索引)的原因。
-
ROLLUP 是附屬于 Base 表的,可以看做是 Base 表的一種輔助數據結構。用戶可以在 Base 表的基礎上,創建或刪除 ROLLUP,但是不能在查詢中顯式的指定查詢某ROLLUP。是否命中 ROLLUP 完全由 Doris 系統自動決定。
-
ROLLUP 的數據是獨立物理存儲的。因此,創建的 ROLLUP 越多,占用的磁盤空間也就越大。同時對導入速度也會有影響(導入的 ETL 階段會自動產生所有ROLLUP 的數據),但是不會降低查詢效率(只會更好)。
-
ROLLUP 的數據更新與 Base 表是完全同步的。用戶無需關心這個問題。
-
ROLLUP 中列的聚合方式,與 Base 表完全相同。在創建 ROLLUP 無需指定,也不能修改。
-
查詢能否命中 ROLLUP 的一個必要條件(非充分條件)是,查詢所涉及的所有列(包括 select list 和 where 中的查詢條件列等)都存在于該 ROLLUP 的列中。否則,查詢只能命中 Base 表。
-
某些類型的查詢(如?
count(*)
)在任何條件下,都無法命中 ROLLUP。 -
可以通過 EXPLAIN your_sql; 命令獲得查詢執行計劃,在執行計劃中,查看是否命中 ROLLUP。
-
可以通過 DESC tbl_name ALL; 語句顯示 Base 表和所有已創建完成的 ROLLUP。