關於快取命中

已啟用快取功能時,系統會評估每個查詢以判斷它是否符合快取命中資格。

快取命中意謂著 Oracle Analytics Cloud 能夠使用快取來回答查詢,而完全不用前往資料庫。Oracle Analytics Cloud 可以使用查詢快取來回答相同或更高聚總層級的查詢。

有許多因素可決定快取是否為命中。下表描述這些因素。

因素或規則 描述

SELECT 清單中的資料欄子集必須相符

新查詢之 SELECT 清單中的所有資料欄必須存在於快取的查詢中,才符合快取命中資格,或是必須要能夠從查詢中的資料欄計算出它們。

此規則描述命中快取的最低需求,但符合此規則並不保證就是快取命中。此表格中所列的其他規則也適用。

SELECT 清單中的資料欄可由所快取查詢的資料欄表示式組成

Oracle Analytics Cloud 可以計算所快取結果的表示式來回答新查詢,但所有資料欄都必須在所快取的結果中。例如,查詢:

SELECT product, month, averageprice FROM sales WHERE year = 2000

會命中以下查詢的快取:

SELECT product, month, dollars, unitsales FROM sales WHERE year = 2000

因為可從 dollarsunitsales 計算出 averageprice (averageprice = dollars/unitsales)。

WHERE 子句必須是語意上相同或為邏輯子集

若要讓查詢符合快取命中資格,WHERE 子句限制必須等於所快取的結果,或是所快取結果的子集。

WHERE 子句若為所快取查詢的邏輯子集,當子集符合下列其中一個條件時,即符合快取命中資格:

  • IN 清單值的子集。查詢若要求較少的 IN 清單快取查詢元素,便符合快取命中資格。例如,下列查詢:

    SELECT employeename, region
    FROM employee, geography
    WHERE region in ('EAST', 'WEST')

    在下列快取的查詢上符合命中資格:

    SELECT employeename, region
    FROM employee, geography
    WHERE region in ('NORTH', 'SOUTH', 'EAST', 'WEST')
  • 它包含比所快取結果少 (但相同的) OR 限制。

  • 它包含文字比較的邏輯子集。例如,下列述詞:

    WHERE revenue < 1000

    符合含以下述詞之可比較查詢的快取命中資格:

    WHERE revenue < 5000
  • 沒有 WHERE 子句。如果所快取的是沒有 WHERE 子句的查詢,則滿足所有其他快取命中規則的查詢不論其 WHERE 子句為何,都符合快取命中資格。

此外,WHERE 子句上使用的資料欄必須在輸出清單上。例如,下列查詢:

SELECT employeename
FROM employee, geography
WHERE region in ('EAST', 'WEST')

不會產生先前清單中原始內建查詢的快取命中,因為 REGION 不在輸出清單上。

僅限維度的查詢必須為完全相符

如果查詢僅限維度 (亦即查詢中不包含任何事實或計量),則只有與所快取查詢之輸出資料欄完全相符時,才表示命中快取。此行為可防止在維度表格有多個邏輯來源時出現假陽性的情況。

含特殊函數的查詢必須為完全相符

其他包含時間序列函數 (AGOTODATEPERIODROLLING)、限制與偏移量函數 (OFFSETFETCH)、關係函數 (ISANCESTORISLEAFISROOTISSIBLING)、外部聚總函數等特殊函數且一般包含篩選度量的查詢必須也與所快取查詢中的輸出資料欄完全相符。在這些情況下,篩選必須也是完全相符。針對篩選度量,如果篩選度量可以重新編寫為 WHERE 子句,則可以利用子集快取。

邏輯表格集必須相符

若要符合快取命中資格,所有內送查詢都必須有相同的邏輯表格集作為快取項目。此規則可避免假快取命中。例如 SELECT * FROM productSELECT * FROM product, sales 不相符。

階段作業變數值必須相符,包括安全階段作業變數

如果邏輯 SQL 或實體 SQL 敘述句參照任何階段作業變數,則階段作業變數值必須相符。否則就不會命中快取。

此外,階段作業變數若具安全機密性,其值就必須與語意模型中所定義的安全階段作業變數值相符,即使邏輯 SQL 敘述句本身並未參照階段作業變數。請參閱使用資料列層級資料庫安全性時確保快取結果正確

相等結合條件

新查詢要求的結果結合邏輯表格必須與快取的結果相同 (或為其子集),才符合快取命中資格。

DISTINCT 屬性必須相同

如果快取的查詢藉由 DISTINCT 處理 (例如 SELECT DISTINCT...) 去除重複記錄,則對所快取資料欄的要求必須也包含 DISTINCT 處理;對相同資料欄的要求若未包含 DISTINCT 處理,即為快取未命中。

查詢必須包含相容的聚總層級

查詢若是要求聚總層級的資訊,便可使用較低聚總層級的快取結果。例如,下列查詢要求的是供應商、區域及縣/市層級的銷售數量:

SELECT supplier, region, city, qtysold
FROM suppliercity

下列查詢要求的是縣/市層級的銷售數量:

SELECT city, qtysold
FROM suppliercity

第二個查詢會命中第一個查詢的快取。

有限的額外聚總

例如,如果快取的是含 qtysold 資料欄的查詢,則對 RANK(qtysold) 的要求會導致快取未命中。此外,查詢若是要求國家/地區層級的 qtysold,便可從要求國家/地區、區域層級 qtysold 的查詢取得快取命中。

ORDER BY 子句必須由 select 清單中的資料欄組成

查詢的排序依據資料欄若未包含在 select 清單中,就會導致快取未命中。

診斷快取命中行為

為了能夠更好地評定快取命中行為,請將 ENABLE_CACHE_DIAGNOSTICS 階段作業變數設為 4,如下列範例所示:

ENABLE_CACHE_DIAGNOSTICS=4