2012-04-18 59 views

回答

1

來自Vertica文檔的概念指南.pdf(大約在第23頁)。

投影以優化查詢執行的格式存儲數據。 它們與物化視圖類似,因爲它們將結果集 存儲在磁盤上,而不是每次在查詢中使用它們時計算它們。

預測是透明給最終用戶的SQL。 Vertica查詢 優化程序會自動選擇用於任何 查詢的最佳投影。

爲了提高查詢性能,所有需要完成的投影都是爲了創建投影。 Vertica將自動選擇用於該查詢的最佳投影。 (注意:可以通過特定查詢來強制執行特定投影,而不是查詢表格)

我不知道您對預測的理解在哪裏,但有關預測的更具體的問題將允許更詳細地闡述特定點。如果您希望瞭解我推薦的概念並閱讀概念指南.pdfhttp://my.vertica.com

+0

謝謝尼婭。您的回覆非常有用。我對此還有幾個問題。 我的理解是,PROJECTIONS類似於VIEWS,不同之處在於投影將結果集存儲在磁盤上,而視圖每次在查詢中使用它們時都會計算表中的數據。 我可以使用VIEW作爲PROJECTION的備用項目嗎?如果是這樣,我會得到任何性能問題嗎? – Murali 2012-04-19 06:12:44

+0

@Murali:Vertica中的「Views」本質上是查詢。 (來自_SQL Reference Manual.pdf_)「[in]包含視圖的查詢,視圖名稱將被視圖的定義查詢替換」 – Nija 2012-04-19 16:58:14

+0

謝謝。順便說一句,我無法從http://my.vertica.com下載Concepts Guide.pdf。看來,只有授權用戶才能下載。我註冊了,但還沒有收到激活郵件。有沒有其他方法可以獲得.pdf指南? – Murali 2012-04-19 17:54:20

7

Vertica不使用索引來查找數據。

從概念上講,您仍然使用SQL訪問表。但在引擎蓋下方,表格中的數據存儲在投影中,您可以針對不同的查詢進行優化。

我喜歡把它看作代表一副牌的桌子。如果玩撲克,你可能仍然會說「從CardDeck限制5選擇*」。

比方說,你有以下的列定義的表:

秀場INT(讓我們只是假設,面值有整型), 套裝VARCHAR(10)

我可以創建我的預測(我省略關於分區,超級預測,好友預測等的細節)。

創建投影CardDeck_p1 ( ENCODING秀RLE, 套裝 ) 作爲 選擇秀,從由秀CardDeck順序套裝;

創建投影CardDeck_p2 ( 秀, 套裝 ) 作爲 選擇秀,從由套裝CardDeck順序套裝;

現在,每列可以得到不同類型的投影中定義的編碼。而數據庫設計人員,自從我使用舊版本以來,我並沒有多少使用它,可以幫助您設計預測。因此,回到卡片類比的套牌,想象你想要訪問一副牌,但你想有不同的洗牌卡。 Vertica中的投影爲您提供了不同的洗牌方式。表格實際上是一個構造,它允許您訪問存儲在投影中的數據。但是如果你正在編寫SQL,你可以訪問表。

+0

非常感謝geoffrobinson! – Murali 2012-04-19 05:49:56

1

我想強調一下在geoff的答案中提出的觀點 - 投影是磁盤上的物理結構。爲表定義多個投影可以提高查詢性能,但代價是磁盤空間增加和加載時間較慢(因爲您的行必須放入每個投影中)。

有超級投影將所有列存儲在表中以及部分投影。當您試圖支持/優化的查詢只需要表格中的一部分列時,就可以使用部分投影。每張桌子至少需要一個超級投影。如果您沒有定義一個,Vertica將提供默認的一個,這可能會導致性能很差。

建議的做法是讓Database Designer工具幫助您使用測試數據和測試查詢分析您的表格,之後它可以爲您提供投影。我個人沒有以這種方式獲得好的結果,但知道如何使用DBD工具應該成爲Vertica培訓任何人的課程的一部分。

+0

謝謝kimbo305 – Murali 2012-04-19 10:56:50

0

看起來你似乎很熟悉意見。預測與概念上的觀點非常相似,它們都緩存了某些內容,但是處於不同的級別。簡而言之,視圖緩存查詢語句,而投影緩存查詢結果。

視圖緩存查詢語句。您給預定義查詢命名,然後調用它們。查看查詢在創建時不會執行。當您使用視圖執行查詢時,由於它們只是普通查詢,所以不會得到任何性能改進。

投影緩存查詢結果。投影查詢在創建時執行,並且結果在存儲上保留。當您執行任何可以利用查詢結果的查詢時,Vertica將使用這些投影來響應查詢,從而提高查詢性能。創建投影之後,您無需執行任何特殊操作,Vertica將自動選擇投影,前提是可以有利於查詢。該投影可用於查詢,因爲該查詢使用投影的子集列,具有相同的排序順序等。

像視圖這樣的投影,您可以選擇表列的子集,與其他表執行聯接,按特定列排序。但是,不同的預測會佔用自己的空間來保存查詢結果,創建的投影越多,它們將被消耗的空間就越多。在更新相關源表時,投影會自動更新。更新過程在後臺執行,可能需要很長時間,具體取決於查詢複雜性和數據大小。因此,預測更適合許多讀取,而不是許多寫入。從用例角度來看,與實時Web儀表盤相比,預測更適合報告。

在實施細節中,Vertica中的表格都是邏輯的。表中的所有數據都存儲在每個關聯的超級投影中。超級投影包含表格中的所有列,並且默認情況下會自動創建。所有其他投影均來自超級投影。

Vertica的將決定什麼樣的預測將被用於查詢,但你也可以指定預測的名義直接迫使Vertica的使用它們:

-- List all projections 
SELECT projection_name FROM projections; 

-- Force to use super projection, _super is the suffix of the super projection 
SELECT * FROM FACT_TABLE_super; 

您可以使用EXPLAIN語句看什麼在查詢計劃中使用投影。這將幫助您提高查詢的性能。