在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

數(shù)據(jù)庫(kù)SQL的優(yōu)化

科技綠洲 ? 來(lái)源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-10-09 15:43 ? 次閱讀

數(shù)據(jù)庫(kù)執(zhí)行SQL都會(huì)先進(jìn)行語(yǔ)義解析,然后將SQL分成一步一步可執(zhí)行的計(jì)劃,然后逐步執(zhí)行。通過(guò)分析執(zhí)行計(jì)劃,我們可以清晰的看到數(shù)據(jù)庫(kù)執(zhí)行的操作,這對(duì)于數(shù)據(jù)庫(kù)SQL的優(yōu)化具有重大意義。

1. 執(zhí)行計(jì)劃

用戶成功連接數(shù)據(jù)庫(kù)之后,用戶和數(shù)據(jù)庫(kù)成功建立起了會(huì)話。此后,用戶每通過(guò)會(huì)話發(fā)出一條SQL語(yǔ)句,數(shù)據(jù)庫(kù)系統(tǒng)都會(huì)對(duì)其進(jìn)行一系列檢查、分析、處理。

同時(shí)優(yōu)化器會(huì)對(duì)SQL進(jìn)行一些優(yōu)化,并選擇出一個(gè)它覺(jué)得最優(yōu)的執(zhí)行計(jì)劃,然后再去執(zhí)行這些操作。由于SQL不同的寫法會(huì)影響優(yōu)化器為之生成和選定的執(zhí)行計(jì)劃。所以我們就可以通過(guò)改寫SQL語(yǔ)句來(lái)改變其執(zhí)行計(jì)劃,從而提升SQL語(yǔ)句性能。

2. 系統(tǒng)統(tǒng)計(jì)數(shù)據(jù)

系統(tǒng)統(tǒng)計(jì)數(shù)據(jù)反映了數(shù)據(jù)庫(kù)系統(tǒng)的處理能力,會(huì)對(duì)執(zhí)行計(jì)劃中左右操作成本(其實(shí)就是性能消耗)計(jì)算產(chǎn)生重要影響。系統(tǒng)統(tǒng)計(jì)數(shù)據(jù)主要包括轉(zhuǎn)速、單塊讀消耗時(shí)間、多塊讀消耗時(shí)間、多塊讀平均每次讀取的數(shù)據(jù)塊等。

系統(tǒng)統(tǒng)計(jì)數(shù)據(jù)會(huì)影響優(yōu)化器計(jì)算分析SQL語(yǔ)句執(zhí)行計(jì)劃的成本所選擇的算法,也會(huì)影響SQL語(yǔ)句生成和選擇的執(zhí)行計(jì)劃。

3. 對(duì)象統(tǒng)計(jì)數(shù)據(jù)

優(yōu)化器對(duì)SQL進(jìn)行解析的時(shí)候,會(huì)根據(jù)系統(tǒng)統(tǒng)計(jì)數(shù)據(jù)和對(duì)象統(tǒng)計(jì)數(shù)據(jù)等信息,計(jì)算成本,最后選出最低成本的執(zhí)行計(jì)劃。由于系統(tǒng)統(tǒng)計(jì)數(shù)據(jù)認(rèn)為很難干涉,所以對(duì)象統(tǒng)計(jì)數(shù)據(jù)對(duì)于SQL執(zhí)行計(jì)劃來(lái)說(shuō)影響更大。

對(duì)象統(tǒng)計(jì)數(shù)據(jù)主要包括三個(gè)部分:表(分區(qū)及子分區(qū))相關(guān)統(tǒng)計(jì)數(shù)據(jù)、索引相關(guān)統(tǒng)計(jì)數(shù)據(jù)和字段相關(guān)統(tǒng)計(jì)數(shù)據(jù)。所以收集這些信息則可以進(jìn)行對(duì)象統(tǒng)計(jì)數(shù)據(jù)的分析,從而進(jìn)行SQL優(yōu)化。

4. 獲取執(zhí)行計(jì)劃

獲取執(zhí)行計(jì)劃有多種方法,下面分別介紹一下。

4.1 通過(guò)各種GUI工具獲得執(zhí)行計(jì)劃

通過(guò)各種GUI可以獲取到執(zhí)行計(jì)劃,其優(yōu)點(diǎn)是操作簡(jiǎn)單,靈活;獲取的信息也比較多。

下面是通過(guò)Sql Developer中的工具直接獲取到的執(zhí)行計(jì)劃示例

圖片

4.2 autotrace功能

autotrace功能是Oracle公司產(chǎn)品,其功能強(qiáng)大、使用靈活,因而應(yīng)用廣泛。

4.2.1使用方法介紹

set autot off  關(guān)閉autotrace功能
set autot on 開啟autotrace功能,輸出SQL語(yǔ)句的查詢結(jié)果,執(zhí)行計(jì)劃以及相關(guān)的性能統(tǒng)計(jì)數(shù)據(jù)
set autot on expl 開啟autotrace功能,輸出SQL語(yǔ)句的查詢結(jié)果,執(zhí)行計(jì)劃,不輸出性能統(tǒng)計(jì)數(shù)據(jù)
set autot on stat 開啟autotrace功能,輸出SQL語(yǔ)句的查詢結(jié)果以及相關(guān)性能數(shù)據(jù),不輸出執(zhí)行計(jì)劃
set autot trace 開啟autotrace功能,只輸出SQL語(yǔ)句的執(zhí)行計(jì)劃以及性能數(shù)據(jù),不輸出查詢結(jié)果
set autot trace expl 開啟autotrace功能,只輸出SQL的執(zhí)行計(jì)劃,不輸出查詢結(jié)果及性能數(shù)據(jù)
set autot trace stat 開啟autotrace功能,只輸出SQL的性能統(tǒng)計(jì)數(shù)據(jù),不輸出執(zhí)行計(jì)劃以及查詢結(jié)果

如下示例:

set autotrace on
select * from emp join DEPT on emp.DEPTNO = DEPT.DEPTNO
where DNAME = 'SALES';

圖片

圖中輸出了執(zhí)行計(jì)劃以及性能數(shù)據(jù).

4.3 使用DBMS_XPLAN包

DBMS_XPLAN是Oracel數(shù)據(jù)庫(kù)的內(nèi)置包,該包提供了多個(gè)函數(shù),通過(guò)這些函數(shù),用戶可以比較容易的獲取執(zhí)行計(jì)劃等數(shù)據(jù)。

4.3.1 DISPLAY方法
DBMS_XPLAN.DISPLAY(
 table_name in varchar2 default 'PLAN_TABLE',
    statement_id in varchar2 default null,
    format in varchar2 default 'TYPICAL',
    filter_preds in varchar2 default null);

以上是DISPLAY的語(yǔ)法,默認(rèn)執(zhí)行計(jì)劃存儲(chǔ)表為PLAN_TABLE,如果要查詢此表需要有SELECT的權(quán)限。

其中的參數(shù)含義如下:

  • table_name :存儲(chǔ)執(zhí)行計(jì)劃的表名。
  • statement_id :SQL語(yǔ)句的ID ,可以使用set statement_id 來(lái)指定其ID。如果為null,則表示獲取最近被解釋的SQL的執(zhí)行計(jì)劃。
  • format :執(zhí)行計(jì)劃的具體輸出級(jí)別 其值有
    • 'BASIC' :基本輸出,經(jīng)輸出執(zhí)行計(jì)劃中每個(gè)節(jié)點(diǎn)),
    • 'TYPICAL' :典型格式輸出,默認(rèn)格式。該格式輸出每個(gè)節(jié)點(diǎn)的ID、操作名、節(jié)點(diǎn)的數(shù)據(jù)行、字節(jié)數(shù)、優(yōu)化成本等。
    • 'SERIAL' :串行執(zhí)行格式,輸出與典型格式類似。
    • 'ALL' :完全格式, 最高用戶級(jí)別的輸出格式,除了輸出典型格式的內(nèi)容,還會(huì)輸出投影以及別名的相關(guān)信息。

示例如下:

explain plan for 
select * from emp join DEPT on emp.DEPTNO = DEPT.DEPTNO
where DNAME = 'SALES';
select * from table(dbms_xplan.display())

圖片

為了更好的控制執(zhí)行計(jì)劃的輸出格式,如下的關(guān)鍵字可以添加到標(biāo)準(zhǔn)格式后面,用來(lái)自定義輸出格式以及信息。

  • ROWS 輸出優(yōu)化器估算出的數(shù)據(jù)行數(shù)
  • BYTES 輸出優(yōu)化器估算出的字節(jié)數(shù)
  • COST 輸出優(yōu)化器估算出的成本
  • PARTITION 輸出分區(qū)裁剪相關(guān)信息
  • PREDICATE 輸出謂詞部分相關(guān)信息
  • PARALLEL 輸出并行操作(PX)相關(guān)信息
  • PROJECTION 輸出字段映射部分相關(guān)信息
  • ALIAS 輸出查詢塊/對(duì)象 別名相關(guān)信息
  • REMOTE 輸出分布式查詢相關(guān)信息
  • NOTE 輸出執(zhí)行計(jì)劃的提醒部分相關(guān)信息

示例如下:

explain plan for 
select * from emp join DEPT on emp.DEPTNO = DEPT.DEPTNO
where DNAME = 'SALES';
select * from table(dbms_xplan.display());
select * from table(dbms_xplan.display(null,null,'BASIC ROWS BYTES'));
select * from table(dbms_xplan.display(null,null,'ALL -PROJECTION -NOTE'));
select * from table(dbms_xplan.display(null,null,'ALL PROJECTION NOTE'));
4.3.2 DISPLAY_CURSOR方法

語(yǔ)法如下

DBMS_XPLAN.DISPLAY_CURSOR(
 sql_id in varchar2 default null,--默認(rèn)獲取會(huì)話最后一個(gè)游標(biāo)處的執(zhí)行計(jì)劃
    child_number in number default null,--游標(biāo)的子號(hào)
    format in varchar2 default 'TYPICAL' --輸出級(jí)別,與之前介紹相同
);

此函數(shù)可以獲取內(nèi)存游標(biāo)緩存處的執(zhí)行計(jì)劃和統(tǒng)計(jì)信息。

示例如下:

alter session set statistics_level = all;
select * from emp join DEPT on emp.DEPTNO = DEPT.DEPTNO
where DNAME = 'SALES';
select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));

執(zhí)行結(jié)果:

圖片

以下函數(shù)使用較少,所以僅介紹其語(yǔ)法及功能。

4.3.3 DISPLAY_AWR

語(yǔ)法如下

DBMS_XPLAN.DISPLAY_AWR(
    sql_id IN varchar2
 plan_hash_value in number default null,
    db_id in number default null,
    format in varchar2 default 'TYPICAL');

DISPLAY_AWR函數(shù)獲取存儲(chǔ)在AWR歷史庫(kù)中SQL語(yǔ)句的執(zhí)行計(jì)劃相關(guān)信息。

4.3.4 DISPLAY_PLAN

語(yǔ)法如下

DBMS_XPLAN.DISPLAY_PLAN(
    table_name in varchar2 default 'PLAN_TABLE',
    statement_id in varchar2 default null,
    format in varchar2 default 'TYPICAL',
    filter_preds in varchar2 default null,
    type in varchar2 default null --輸出類型,其值為'TEXT','ACTIVE','HTML','XML'
);

該函數(shù)可獲取執(zhí)行計(jì)劃存儲(chǔ)表的內(nèi)容。可顯示CLOB類型信息,包括執(zhí)行計(jì)劃以及相關(guān)統(tǒng)計(jì)信息。

4.3.5 DISPLAY_SQL_PLAN_BASELINE

語(yǔ)法如下

DISPLAY_XPLAN.DISPLAU_SQL_PLAN_BASELINE(
    sql_handle in varchar2 := null,
    plan_name in varchar2 := null,
    format in varchar2 := 'TYPICAL')
return dbms_xpaln_type_table;

此函數(shù)和獲取存儲(chǔ)在系統(tǒng)視圖中SQL語(yǔ)句計(jì)劃基線的執(zhí)行計(jì)劃相關(guān)的信息。

4.3.6 DISPLAY_SQLSET
DBMS_XPLAN.DISPLAY_SQLSET(
 sqlset_name in varchar2,
    sql_id in varchar2,
    plan_hash_value in number := null,
    format in varchar2 := 'TYPICAL',
    sqlset_owner in varchar2 := null
)
return DBMS_XPLAN_TYPE_TABLE PIPELINED;

此函數(shù)獲取存儲(chǔ)在SQL調(diào)優(yōu)集中SQL語(yǔ)句的執(zhí)行計(jì)劃以及相關(guān)信息。

4.4 查詢PLAN_TABLE獲取執(zhí)行計(jì)劃

我們可以通過(guò)編寫的SQL語(yǔ)句來(lái)查詢執(zhí)行計(jì)劃。即直接查詢執(zhí)行計(jì)劃存儲(chǔ)表(默認(rèn)為PLAN_TABLE)

explain plan SET STATEMENT_ID = 'TEST1' for 
select * from emp join DEPT on emp.DEPTNO = DEPT.DEPTNO
where DNAME = 'SALES';

SELECT  ID, PARENT_ID ,OPERATION ,OBJECT_NAME NAME , BYTES ,IO_COST ,CPU_COST
FROM PLAN_TABLE WHERE STATEMENT_ID = 'TEST1' ORDER BY ID ;

圖片

或者使用如下SQL查詢

SELECT  ID, PARENT_ID ,
    LPAD(' ', LEVEL-1)||OPERATION||' '||OPTIONS||' '||OBJECT_NAME NAME
FROM PLAN_TABLE 
CONNECT BY prior id = parent_id 
    and prior statement_id = statement_id 
start with id = 0 
    and statement_id = 'TEST1'
 ORDER BY ID ;

結(jié)果如下

圖片

4.5 跟蹤計(jì)劃

通過(guò)對(duì)SQL語(yǔ)句進(jìn)行跟蹤,從而獲取相關(guān)執(zhí)行計(jì)劃等。

主要方法有SQL_TRACE 和OPTIMIZER_TRACE ,前者會(huì)在跟蹤文件里輸出執(zhí)行計(jì)劃及性能統(tǒng)計(jì)等相關(guān)數(shù)據(jù)。OPTIMIZER_TRACE 在跟蹤文件里記錄優(yōu)化器分析、選擇執(zhí)行計(jì)劃的過(guò)程。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    764

    瀏覽量

    44128
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    3799

    瀏覽量

    64388
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4331

    瀏覽量

    62611
  • GUI
    GUI
    +關(guān)注

    關(guān)注

    3

    文章

    660

    瀏覽量

    39675
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    數(shù)據(jù)庫(kù)設(shè)計(jì)及開發(fā)規(guī)范之sql性能優(yōu)化

    數(shù)據(jù)庫(kù)設(shè)計(jì)及開發(fā)規(guī)范,sql性能優(yōu)化
    發(fā)表于 05-08 10:58

    如何修復(fù)置疑SQL數(shù)據(jù)庫(kù)

    如何修復(fù)置疑SQL數(shù)據(jù)庫(kù) 如果 SQL Server 因?yàn)榇疟P可用空間不足,而不能完成數(shù)據(jù)庫(kù)的恢復(fù),那么  SQL Server
    發(fā)表于 03-29 10:42 ?944次閱讀

    數(shù)據(jù)庫(kù)SQL語(yǔ)句電子教程

    電子發(fā)燒友為您提供了數(shù)據(jù)庫(kù)SQL語(yǔ)句電子教程,幫助您了解數(shù)據(jù)庫(kù) SQL語(yǔ)句 ,學(xué)習(xí)讀懂數(shù)據(jù)庫(kù)SQL
    發(fā)表于 07-14 17:09 ?0次下載

    Oracle數(shù)據(jù)庫(kù)SQL優(yōu)化培訓(xùn)

    數(shù)據(jù)庫(kù)講解
    發(fā)表于 12-16 21:46 ?0次下載

    醫(yī)院SQL數(shù)據(jù)庫(kù)系統(tǒng)語(yǔ)句優(yōu)化

    本文就如何優(yōu)化大型數(shù)據(jù)庫(kù)的性能進(jìn)行了一些探索,提出了優(yōu)化數(shù)據(jù)庫(kù)訪問(wèn)性能的若干策略,特別是對(duì)SQL語(yǔ)句進(jìn)行了有效的分析設(shè)計(jì)的問(wèn)題,以使其加快執(zhí)
    的頭像 發(fā)表于 02-17 20:26 ?5322次閱讀

    創(chuàng)建新的數(shù)據(jù)庫(kù)和更改SQL Server CE數(shù)據(jù)庫(kù)中的數(shù)據(jù)操作教程免費(fèi)下載

    SQL Server CE 中的數(shù)據(jù)庫(kù)是存儲(chǔ)結(jié)構(gòu)化數(shù)據(jù)的表集合。在可以存儲(chǔ)數(shù)據(jù)庫(kù)之前,必須創(chuàng)建數(shù)據(jù)庫(kù)。在創(chuàng)建
    發(fā)表于 09-19 11:28 ?5次下載

    ACCESS數(shù)據(jù)庫(kù)SQL語(yǔ)言

    ACCESS數(shù)據(jù)庫(kù)SQL語(yǔ)言(電源技術(shù)版面費(fèi)5400)-ACCESS數(shù)據(jù)庫(kù)SQL語(yǔ)言,有需要的可以參考!
    發(fā)表于 08-31 12:13 ?21次下載
    ACCESS<b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>SQL</b>語(yǔ)言

    基于LABVIEW的SQL Server數(shù)據(jù)庫(kù)操作教程

    基于LABVIEW的SQL Server數(shù)據(jù)庫(kù)操作教程
    發(fā)表于 09-13 14:54 ?92次下載

    ORACLE數(shù)據(jù)庫(kù)教程-SQL使用講解

    ORACLE數(shù)據(jù)庫(kù)教程-SQL使用講解(普德新星電源技術(shù)有限公司最新招聘信息)-該文檔為ORACLE數(shù)據(jù)庫(kù)教程-SQL使用講解文檔,是一份還算不錯(cuò)的參考文檔,感興趣的可以下載看看,,,
    發(fā)表于 09-28 10:27 ?4次下載
    ORACLE<b class='flag-5'>數(shù)據(jù)庫(kù)</b>教程-<b class='flag-5'>SQL</b>使用講解

    SQL SERVER數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)案例

    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)環(huán)境: 某品牌存儲(chǔ)存放大小約80TB的SQL SERVER數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)包含兩個(gè)LDF文件,每10天生成一個(gè)500GB大小的
    的頭像 發(fā)表于 09-29 11:39 ?1256次閱讀
    <b class='flag-5'>SQL</b> SERVER<b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例

    SQL SERVER數(shù)據(jù)庫(kù)ndf文件損壞的數(shù)據(jù)恢復(fù)案例

    某公司存儲(chǔ)上部署SQL SERVER數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)中有1000多個(gè)文件,該SQL SERVER數(shù)據(jù)庫(kù)每10天生成一個(gè)NDF文件,
    的頭像 發(fā)表于 04-27 11:11 ?808次閱讀

    使用SQL語(yǔ)句創(chuàng)建數(shù)據(jù)庫(kù)

    使用SQL語(yǔ)句創(chuàng)建數(shù)據(jù)庫(kù) 在今天的信息社會(huì)中,數(shù)據(jù)庫(kù)是信息化建設(shè)的關(guān)鍵要素之一,已經(jīng)成為企業(yè)和組織的重要管理工具。創(chuàng)建數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)操作的第
    的頭像 發(fā)表于 08-28 17:09 ?4123次閱讀

    sql怎么用代碼創(chuàng)建數(shù)據(jù)庫(kù)

    sql怎么用代碼創(chuàng)建數(shù)據(jù)庫(kù) SQL是一種結(jié)構(gòu)化查詢語(yǔ)言,用于通過(guò)編程語(yǔ)言與數(shù)據(jù)庫(kù)進(jìn)行通信。它允許用戶從數(shù)據(jù)庫(kù)中檢索、修改和刪除
    的頭像 發(fā)表于 08-28 17:09 ?2744次閱讀

    sql數(shù)據(jù)庫(kù)入門基礎(chǔ)知識(shí)

    SQL(Structured Query Language,結(jié)構(gòu)化查詢語(yǔ)言)是一種用于管理關(guān)系型數(shù)據(jù)庫(kù)的編程語(yǔ)言。它被廣泛應(yīng)用于企業(yè)應(yīng)用、數(shù)據(jù)倉(cāng)庫(kù)和網(wǎng)站開發(fā)等領(lǐng)域。了解SQL的基礎(chǔ)知識(shí)
    的頭像 發(fā)表于 11-23 14:24 ?2023次閱讀

    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)庫(kù)出現(xiàn)823錯(cuò)誤的數(shù)據(jù)恢復(fù)案例

    SQL Server數(shù)據(jù)庫(kù)故障: SQL Server附加數(shù)據(jù)庫(kù)出現(xiàn)錯(cuò)誤823,附加數(shù)據(jù)庫(kù)失敗。數(shù)據(jù)庫(kù)
    的頭像 發(fā)表于 09-20 11:46 ?350次閱讀
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—<b class='flag-5'>SQL</b> Server<b class='flag-5'>數(shù)據(jù)庫(kù)</b>出現(xiàn)823錯(cuò)誤的<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例
    主站蜘蛛池模板: 国产精品永久免费自在线观看| 在线视频你懂得| 操女人在线| 日本级毛片免费观看| 色妞视频资源在线观看| 久青草国产在线视频_久青草免| 五月天婷婷精品视频| 亚洲国产日韩女人aaaaaa毛片在线| 色播五月综合| 狠狠色欧美亚洲狠狠色www| 在线观看永久免费视频网站| 日本乱妇| 手机在线观看毛片| 狠狠操综合| 福利在线观看| 久久久久无码国产精品一区| 免费看三级黄色片| 九色愉拍自拍| 亚洲性一区| 免看一级a一片成人123| 夜夜cao| 粉嫩尤物在线456| 性色免费视频| 一区二区三区午夜| 人人插人人爽| 久久精品2020| 天天做天天爱夜夜爽| 免费一区二区三区| 日韩美女奶水喂男人在线观看| 五月天婷婷网站| 国产免费高清在线精品一区| 国产一级爱c片免费播放| 欧美zo| 四虎永久免费网站免费观看| 亚色中文| 中文字幕亚洲一区婷婷| 明星三级国产免费播放| аⅴ资源中文在线天堂| 日本免费小视频| 五月婷婷网址| 中文字幕第页|