2014-04-12 33 views
2

我有一個名爲FANS的表,它存儲了各種人的人口統計信息,包括姓名,地址和DOB。該表本身包含7,655行數據。我在CITY列創建了一個INDEX。我知道表中只有40個獨特的城市,並且沒有NULL值。我試圖在優化器開始使用INDEX時運行一個簡單的實驗。Oracle SQL Developer:計算選擇性

SELECT CITY 
FROM FANS 
WHERE CITY BETWEEN 'APOLLO BEACH' AND 'BRANDON'; 

我學到了以前從MySQL是選擇性=基數/記錄×100%,其中基數是索引中唯一值的數量數量。

當我在SQL開發人員運行「解釋計劃」時,它返回500的基數。因此,正確的數學計算是500/7,655 * 100%?

+0

也許oracle公式與MySQL公式不同。 –

+0

https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:40230704959128 – OldProgrammer

回答

1

Oracle查詢計劃中的cardinality是優化程序估計將由計劃的特定步驟返回的行數。所以,是的,優化器估計表中500/7655 = 6.53%的行將與您的謂詞匹配。

如果40 CITY值不是均勻分佈的,您需要在CITY列上有一個直方圖來幫助優化器進行更精確的基數估計。