2012-09-13 67 views
5

我寫了一個複雜的Oracle SQL查詢和解釋計劃統計是這樣的: 費用:209201字節:187944150基數:409675甲骨文解釋計劃:基數返回一個龐大的數字,但該查詢返回任何記錄

現在DBA調諧查詢和統計如下: 費用:42,996字節:89,874,138基數:209,226

我的第一個問題是,如果數字越低,它是否會自動錶示更好的性能? 哪個數字最有用?費用/基數/字節? 我的第二個問題是:我明白基數是讀取的行數。但是當我運行查詢時,它返回'0'行! 我的印象是基數必須相同的兩個查詢,應該返回相同的結果集。我猜這是錯誤的?

+0

基數是(簡單地說)優化器_thinks_將需要的行數;取決於許多因素,包括統計水平,這可能是錯誤的。 – Ben

+0

謝謝。你能解釋什麼是BYTES? – Victor

+1

@Kaushik:在文檔中,「BYTES」是「通過查詢優化方法估計操作訪問的字節數」。但這是誤導,這實際上是操作返回的*字節數。例如,如果您有全表掃描,它將讀取表中的每個字節,但「BYTES」是*任何過濾器之後*的估計大小*。 http://docs.oracle.com/cd/E11882_01/server.112/e16638/ex_plan.htm#r22c1-t12 –

回答

3

成本,字節數,基數...所有數據都是根據輸入(如給出優化器的統計數據)進行的估算。所以他們自動意味着什麼,但可以提供一個想法。在「Oracle性能調優指南」中,「最好使用EXPLAIN PLAN來確定訪問計劃,然後通過測試證明它是最佳計劃。評估計劃時,請檢查語句的實際資源消耗。」

對於第二個問題:理論上等價的查詢應返回相同的基數。你的表的statictics可能是舊的。