1. 程式人生 > >Oracle-表分析和索引分析解讀

Oracle-表分析和索引分析解讀

概述

當表沒有做分析的時候,Oracle 會使用動態取樣來收集統計資訊。 獲取準確的段物件(表,表分割槽,索引等)的分析資料,是CBO存在的基石,CBO的機制就是收集儘可能多的物件資訊和系統資訊,通過對這些資訊進行計算,分析,評估,最終得出一個成本最低的執行計劃。

所以對於CBO,資料段的分析就非常重要。

分析SQL

analyze table tablename compute statistics

等同於 

analyze table tablename compute statistics for table for all indexes for all columns

for table的統計資訊存在於檢視:user_tables 、all_tables、dba_tables

for allindexes的統計資訊存在於檢視: user_indexes 、all_indexes、dba_indexes

for allcolumns的統計資訊存在於試圖:user_tab_columns、all_tab_columns、dba_tab_columns

或者

SQL> exec dbms_stats.gather_table_stats(user,'xiaogongjiang');

生成的統計資訊會存在於user_tables這個檢視,檢視一下

  select * from user_tables where table_name=table_name;

觀察一下NUM_ROWS,BLOCKS,AVG_SPACE,AVG_ROW_LEN幾列你就會明白,這就是變化。

刪除SQL

 analyze table tablename delete statistics 會刪除所有的statistics

作用

Oracle分析表的作用:為了使基於CBO的執行計劃更加準確

栗子

資料準備

Connected to Oracle Database 11g Enterprise Edition Release 11.2
.0.4.0 Connected as [email protected] SQL> create table xiaogongjiang as select a.OBJECT_ID ,a.OBJECT_NAME from dba_objects a ;--建立表 Table created SQL> select count(1) from xiaogongjiang; COUNT(1) ---------- 35183 SQL> create index idx_object_id on xiaogongjiang(object_id);--在object_id建立索引 Index created SQL>

分析前的資料及執行計劃


SQL>  select num_rows, avg_row_len, blocks, last_analyzed  from user_tables  where table_name = 'XIAOGONGJIANG';--表的資訊

  NUM_ROWS AVG_ROW_LEN     BLOCKS LAST_ANALYZED
---------- ----------- ---------- -------------


SQL> select blevel,leaf_blocks,distinct_keys,last_analyzed from user_indexes where table_name='XIAOGONGJIANG';--索引資訊

    BLEVEL LEAF_BLOCKS DISTINCT_KEYS LAST_ANALYZED
---------- ----------- ------------- -------------

從查詢結果看出,表的行數,行長,佔用的資料塊數及最後的分析時間都是空。 索引的相關資訊也沒有,說明這個表和說因都沒有被分析,如果此時有一條SQL 對錶做查詢,CBO 由於無法獲取這些資訊,很可能生成錯誤的執行計劃。

查詢執行計劃

--執行sql,以便存到shared pool中
SQL>select /*+dynamic_sampling(xiaogongjiang 0) */ * from XIAOGONGJIANG  where object_id>30;
.....省略輸出

-- 查詢出上個執行指令碼對應的sql_id:5h16pnkvs0r5z
SQL>select * from v$sql a where a.SQL_TEXT like '%select /*+dynamic_sampling(xiaogongjiang 0) */ * from XIAOGONGJIANG  where object_id>30%';
.....省略輸出

--使用dbms_xplan.display_cursor檢視sql真正的執行計劃
SQL>select * from table(dbms_xplan.display_cursor('5h16pnkvs0r5z'));

匯出html,檢視如下

這裡寫圖片描述

在Oracle 10g以後,如果一個表沒有做分析,資料庫將自動對它做動態取樣分析,

所以這裡採用hint的方式將動態取樣的級別設定為0,即不使用動態取樣。

分析後的資料及執行計劃

第一種方式

SQL> analyze table xiaogongjiang compute statistics ;

Table analyzed

第二種方式(推薦)

SQL> exec dbms_stats.gather_table_stats(user,'xiaogongjiang');

PL/SQL procedure successfully completed

SQL> 第一個引數為使用者,第二個引數為表

通過DBMS_STATS包來分析,從9i 開始,Oracle 推薦使用DBMS_STATS包對錶進行分析操作,因為DBMS_STATS 提供了更多的功能,以及靈活的操作方式。

SQL> select num_rows, avg_row_len, blocks, last_analyzed  from user_tables  where table_name = 'XIAOGONGJIANG';

  NUM_ROWS AVG_ROW_LEN     BLOCKS LAST_ANALYZED
---------- ----------- ---------- -------------
     35183          27        152 2016-12-02 0:


SQL> select blevel,leaf_blocks,distinct_keys,last_analyzed from user_indexes where table_name='XIAOGONGJIANG';

    BLEVEL LEAF_BLOCKS DISTINCT_KEYS LAST_ANALYZED
---------- ----------- ------------- -------------
         1          77         35180 2016-12-02 0:

從上面的結果,可以看出DBMS_STATS.gather_table_stats已經對錶和索引都做了分析。 現在我們在來看一下執行計劃。

SQL>select * from  xiaogongjiang  where object_id>30;

SQL>select * from v$sql a where a.SQL_TEXT like '%select * from  xiaogongjiang  where object_id>30%';

SQL>select * from table(dbms_xplan.display_cursor('gzspgs4btcpuf'));

這裡寫圖片描述

從這個計劃,我們看出CBO 估算出的結果是35153條記錄,與實際的35183很近。 此時選擇全表掃描更優。 通過這個例子,我們也看出了分析對執行計劃的重要性。

相關推薦

Oracle-分析索引分析解讀

概述 當表沒有做分析的時候,Oracle 會使用動態取樣來收集統計資訊。 獲取準確的段物件(表,表分割槽,索引等)的分析資料,是CBO存在的基石,CBO的機制就是收集儘可能多的物件資訊和系統資訊,通過對這些資訊進行計算,分析,評估,最終得出一個成本最低的執行計

MySql 的效能分析索引建立與優化

1、索引簡單語法 建立 CREATE [UNIQUE ] INDEX indexName ON mytable(columnname(length)); ALTER mytable ADD [UNIQUE ] INDEX [indexName] ON

oracle掃描索引掃描

1) 全表掃描(Full Table Scans, FTS)        為實現全表掃描,Oracle讀取表中所有的行,並檢查每一行是否滿足語句的WHERE限制條件。Oracle順序地讀取分配給表的每個資料塊,直到讀到表的最高水線處(high water mark, HWM

創建Oracle空間用戶

ide others maxsize 創建用戶 max add emp alter ant create oracle tablespace and user /*第1步:創建臨時表空間 */ create temporary tablespace test_temp t

主成分分析因子分析(未完成)

svd分解 主成分分析 http src inf 因子分析 分解 spa span 並且SVD分解也適用於一般的矩陣。 主成分分析和因子分析(未完成)

Oracle 註釋SQL註釋

-- table中使用註釋 -- 一般方法 comment on table comment_table is '註釋表示例'; comment on column comment_table.id is '主鍵ID'; -- 使用動態sql BEGIN execute immediate 'COMME

Oracle 空間資料檔案之間的關係

首先,你需要明白的一點是:資料庫的物理結構是由資料庫的作業系統檔案所決定,每一個Oracle資料庫是由三種類型的檔案組成:資料檔案、日誌檔案和控制檔案。資料庫的檔案為資料庫資訊提供真正的物理儲存。  每一個Oracle資料庫有一個或多個物理的資料檔案(data file)。一個數據庫的資料

關於InnoDB資料索引資料的儲存

來自Mysql官方的說明 來看官方文件中對InnoDB的介紹,地址是:https://dev.mysql.com/doc/refman/5.5/en/innodb-introduction.html 上圖紅框中表明,InnoDB表資料的儲存是按照主鍵的值來組織的;

精通Excel資料統計與分析 - 摘要 (第11章:主成分分析因子分析

一、簡介 11.1主成分分析 主成分分析,是將多個變數通過線性變換以選出較少個數重要變數的一種多元統計分析方法,又稱主分量分析; 主成分分析是在減少分析變數個數的同時,保留較多的原始資訊; 可以理解為減少一個矩陣的行; 11.2因子分析

情感分析傾向分析

1微部落格心情挖掘研究(英文已於2009年8月發表,中文草稿只貼,定稿版以英文為準,最新版的工具做了若干微調) 包含情感分析工具的軟體下載入口介紹地址,點選此處 瀋陽1 李舒晨2 鄭玲3 任曉東 程小龍 (1武漢大學資訊管理學院 430072 2武漢大學國際軟體學院430

Oracle 空間使用者的維護(建立、刪除、修改)

        最近為了完成資料在不同庫之間的匯入匯出,臨時建立了不少表空間和使用者,為了保持資料庫的乾淨整潔,根據需要刪除無用的使用者、表空間及物理檔案。 下面是相關的語法操作。 1.查看錶空間 select * from dba_tablespaces 2.查詢物

相關分析迴歸分析

相關分析 相關分析定義 相關分析(correlation analysis),相關分析是研究現象之間是否存在某種依存關係,並對具體有依存關係的現象探討其相關方向以及相關程度,是研究隨機變數之間的相關關係的一種統計方法。 相關關係是一種非確定性的關係,例如,以X和Y分別

軟體專案可行性分析需求分析

    可行性分析是要決定“做還是不做”。          需求分析是要決定“做什麼,不做什麼”。          即使可行性分析是客觀的、科學的,但決策仍有可能是錯誤的。因為決策者是人,人會衝動,有賭博心態。如果可行性分析表明做某件事的成功率是10%,失敗率是90%

SWOT分析PEST分析

1.SWOT分析 定義:SWOT(Strengths Weakness Opportunity Threats)分析法,又稱態勢分析法或優劣勢分析法,用來確定企業自身的競爭優勢(strength)、競爭劣勢(weakness)、機會(opportunity)和

資料索引資料分開獨立空間儲存優點

Oracle資料庫的邏輯結構和物理結構   Oracle 資料庫的邏輯結構是由一些資料庫物件組成,如資料庫表空間、表、索引、段、檢視、儲存過程、觸發器等。資料庫的邏輯儲存結構(表空間等)決定了資料庫的物理空間是如何被使用的,資料庫物件如表、索引等分佈在各個表空間中。   Oracle 資料庫的物理結構從作業

交通燈管理系統-心得1-專案需求分析畫圖分析

1.交通燈管理系統的專案需求 模擬實現十字路口的交通燈管理系統邏輯,具體需求如下: Ø         非同步隨機生成按照各個路線行駛的車輛。 例如:        由南向而來去往北向的車輛 ----

PLSQL怎樣匯出oracle結構資料

tools->export tables 是匯出表結構還有資料 tools->export user objects是匯出表結構 可以用tools->export tables 用中間的sql inserts頁面,選中create tables選項

分析思維 第四篇:資料分析入門階段——描述性統計分析相關分析

資料分析的入門思維,首先要認識資料,然後對資料進行簡單的分析,比如描述性統計分析和相關性分析等。 一,認識變數和資料 變數和資料是資料分析中常用的概念,用變數來描述事物的特徵,而資料是變數的具體值,把變數的值也叫做觀測值。 1,變數 變數是用來描述總體中成員的某一個特性,例如,性別、年齡、身高、收入等。 變數

ORACLE分析索引的指令碼

--         dbms_output.put_line(rec.segment_name||' '||rec.segment_size||'m '||ceil((dbms_utility.get_time - v_start)/100)||'s');         v_start := dbms_u

oracle 常用索引分析註意事項

相關操作 rac 什麽是 效率 rom table 圖片 位圖索引 地址 參考: https://www.cnblogs.com/wishyouhappy/p/3681771.html https://blog.csdn.net/weivi001/article/det