基於成本的優化器
Spark SQL可以使用基於成本的優化器(CBO)來改進查詢計劃。這對於具有多個連接的查詢特別有用。要做到這一點,收集表和列的統計信息並使它們保持最新是至關重要的。
驗證查詢計劃
有幾種方法可以驗證查詢計劃。
解釋
命令
要檢查計劃是否使用統計信息,請使用SQL命令
Databricks RuntimeX及以上:解釋
如果缺少統計信息,則查詢計劃可能不是最優的。
= =優化邏輯計劃= =總[s_store_sk],[s_store_sk,數(1)作為數(1)l],統計數據(sizeInBytes=20.0B,rowCount=1,提示=沒有一個)+-項目[s_store_sk],統計數據(sizeInBytes=18.5MB,rowCount=1.62 e + 6,提示=沒有一個)+-加入內心的,(d_date_sk=ss_sold_date_sk),統計數據(sizeInBytes=30.8MB,rowCount=1.62 e + 6,提示=沒有一個):-項目[ss_sold_date_sk,s_store_sk],統計數據(sizeInBytes=39.1GB,rowCount=2.63 e + 9,提示=沒有一個):+-加入內心的,(s_store_sk=ss_store_sk),統計數據(sizeInBytes=48.9GB,rowCount=2.63 e + 9,提示=沒有一個)::-項目[ss_store_sk,ss_sold_date_sk],統計數據(sizeInBytes=39.1GB,rowCount=2.63 e + 9,提示=沒有一個)::+-過濾器(isnotnull(ss_store_sk)& &isnotnull(ss_sold_date_sk)),統計數據(sizeInBytes=39.1GB,rowCount=2.63 e + 9,提示=沒有一個)::+-關係[ss_store_sk,ss_sold_date_sk]拚花,統計數據(sizeInBytes=134.6GB,rowCount=2.88 e + 9,提示=沒有一個):+-項目[s_store_sk],統計數據(sizeInBytes=11.7KB,rowCount=1.00 e + 3,提示=沒有一個):+-過濾器isnotnull(s_store_sk),統計數據(sizeInBytes=11.7KB,rowCount=1.00 e + 3,提示=沒有一個):+-關係[s_store_sk]拚花,統計數據(sizeInBytes=88.0KB,rowCount=1.00 e + 3,提示=沒有一個)+-項目[d_date_sk],統計數據(sizeInBytes=12.0B,rowCount=1,提示=沒有一個)+-過濾器((((isnotnull(d_year)& &isnotnull(d_date))& &(d_year=2000))& &(d_date=2000-12-31))& &isnotnull(d_date_sk)),統計數據(sizeInBytes=38.0B,rowCount=1,提示=沒有一個)+-關係[d_date_sk,d_date,d_year]拚花,統計數據(sizeInBytes=1786.7KB,rowCount=7.30 e + 4,提示=沒有一個)
重要的
的rowCount
對於具有多個連接的查詢,統計信息尤其重要。如果rowCount
缺失,這意味著沒有足夠的信息來計算它(也就是說,一些必需的列沒有統計信息)。