Performance

如果我在內部聯接中使用 where 子句,為什麼沒有性能差異?

  • September 23, 2019

基本上我在 BQ 中有兩種不同類型的查詢。第一個:

select q2.name, q1.* , q2.val1 from table1 as q1
inner join 
(select name,val1, val2 from table2) as q2
on q1.name = q2.name

第二個是:

select q2.name, q1.* , q2.val1 from table1 as q1
inner join 
(select name,val1, val2 from table2  where val1 = "X") as q2
on q1.name = q2.name

如您所見,唯一的區別是過濾 X 值。當我過濾 table2 內的 X 值時,table2 的大小幾乎是一半。因此,當我應用“where”子句時,我的期望是減少數據字節。但是,當我--dry_run在 BQ cli 中執行時。我得到了完全相同的數據字節。

Query successfully validated. Assuming the tables are not modified, running this query will process 6958332498714 bytes of data.

那麼有人可以解釋為什麼我得到完全相同的處理數據大小嗎?

BigQuery 減少了在以下幾種情況下掃描的數據量:

但是,對於其他類型的過濾器,例如,如果您不對錶進行分區或集群,則會產生掃描整個表的成本。有關更多資訊,請參閱查詢定價文件

引用自:https://dba.stackexchange.com/questions/249424