我很新的SQL編寫,並試圖學習如何優化我的查詢。我看到網上的建議是:說明計劃和索引(我使用的Teradata)優化SQL
我有一些問題:
Teradata的具有「優化」解析引擎後,它意味着優化選擇最有效的計劃?
我知道,解釋計劃爲我們提供瞭如何AMP過程的詳細步驟,並給予信心和估計的時間,我們如何使用它?作爲參考指南?
我們可以在視圖上運行解釋計劃嗎?
對不起,如果我的問題很愚蠢,我試圖學習,並希望有人能幫助。 (:非常感謝你提前
我很新的SQL編寫,並試圖學習如何優化我的查詢。我看到網上的建議是:說明計劃和索引(我使用的Teradata)優化SQL
我有一些問題:
Teradata的具有「優化」解析引擎後,它意味着優化選擇最有效的計劃?
我知道,解釋計劃爲我們提供瞭如何AMP過程的詳細步驟,並給予信心和估計的時間,我們如何使用它?作爲參考指南?
我們可以在視圖上運行解釋計劃嗎?
對不起,如果我的問題很愚蠢,我試圖學習,並希望有人能幫助。 (:非常感謝你提前
在答案的嘗試有在這裏一些不好的假設,但我已經指出了那些在適當情況下:。
在這裏,您說的「SQL Server」這是一個由微軟提供的產品,沒有什麼大問題,但是它會導致混淆,尤其是在我們爲多個RDBMS所做的回答中。至於索引和優化器:索引是你對錶(或者AJI中的多個表) ),它是不是當你提交一個SELECT語句,你做的東西,所以這個問題是從一個壞的假設排序的到來。
通常我們1)做一個表,2)根據假定的使用情況確定並實施適當的索引,3)通過提交SQL來使用它。優化器將查看您的SQL,並基於索引,聯接,歪斜,統計數據和其他事情來嘗試確定將數據組合在一起的最佳方式。
因此,簡而言之,優化器不會對任何內容進行索引。索引是您在提交SQL之前在表上執行的操作。
解釋計劃告訴你究竟是如何將數據從數據庫中,如何將其加入,無論是中間結果集將跨越放大器被重新分配,以及其他重要信息進行檢索。 Teradata的工作原理越少,解釋計劃的幫助就越小,但這是開始學習的好地方!
通常你會寫一個查詢並檢查解釋。根據你的發現,你可能想要改變你的SQL,或者採取更激烈的步驟來創建新的索引。我強烈建議您查閱Allison Torres的「解釋說明」,這本書是一本書和課程。她非常有知識,她將Teradata的解釋分解成非常易消化的部分。
您可以在視圖上運行解釋。只需在視圖前粘貼關鍵字EXPLAIN
即可。當然,它將使用基礎表進行解釋,因爲視圖只是一個使用SQL定義結果集的定義。
如果存在索引,優化程序可能會或可能不會使用它,具體取決於它是否確定索引爲您請求的數據提供了最快的路徑。同樣,索引爲表(或AJI中的一組表)定義一次,並由優化程序決定的可從中受益的任何查詢使用。
非常感謝您對我的錯誤假設提供的幫助和支持,它肯定會清除很多事情。我會糾正原來的帖子,對此感到抱歉,真的很感謝你耐心的回答。 – ADJ
其實你可以用解釋前綴每個sql請求。請注意事實,優化器根據預期的行數進行選擇。對於小的行號(可能是學習環境中的情況),您可能會看到,解釋計劃不會改變,因爲優化器選擇它可以更高效地讀取該小表。優化器決策基於關於行號和分佈的知識。這就是爲什麼優化中的第1步到第10步是「Collect Statistics」。向優化器提供他需要做出正確決策的信息。 – ULick