国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

達(dá)夢(mèng)sql執(zhí)行計(jì)劃、HINT、索引簡(jiǎn)單應(yīng)用

這篇具有很好參考價(jià)值的文章主要介紹了達(dá)夢(mèng)sql執(zhí)行計(jì)劃、HINT、索引簡(jiǎn)單應(yīng)用。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

收集統(tǒng)計(jì)信息. 3

1. 通過(guò)DBMS_STATS包中的方法. 3

2、刪除指定表的統(tǒng)計(jì)信息. 3

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

常用執(zhí)行計(jì)劃操作符. 4

統(tǒng)計(jì)指定sql執(zhí)行號(hào)的所有操作符的執(zhí)行時(shí)間. 5

HINT 5

并行操作:. 6

查詢計(jì)劃重用、結(jié)果集重用. 7

示例. 8

1、收集統(tǒng)計(jì)信息:. 8

3、對(duì)sql搜集統(tǒng)計(jì)信息. 9

2、添加索引. 9

使用優(yōu)化器提示HINT:. 10

索引. 12

創(chuàng)建索引. 12

管理索引. 13

創(chuàng)建全局非分區(qū)索引. 14

創(chuàng)建全局分區(qū)索引. 14

創(chuàng)建局部索引. 15

創(chuàng)建聚集索引. 15

創(chuàng)建唯一索引. 15

索引查詢. 16

重建索引. 16

刪除索引. 16

查看索引信息. 16

數(shù)據(jù)庫(kù)優(yōu)化3個(gè)方面:

1、統(tǒng)計(jì)信息收集:統(tǒng)計(jì)信息準(zhǔn)確,優(yōu)化器選擇執(zhí)行計(jì)劃才能真正做到最優(yōu)。

2、建立合適的索引

3、DM.ini參數(shù)的優(yōu)化

其他的:增加HINT,SQL改寫(xiě)等

收集統(tǒng)計(jì)信息

查看有沒(méi)有收集統(tǒng)計(jì)信息:

select NUM_ROWS,LAST_ANALYZED,TEMPORARY from USER_TABLES where TABLE_NAME='EMP';

NUM_ROWS字段,如果沒(méi)有收集通常是空

LAST_ANALYZED 代表收集的時(shí)間,如果沒(méi)有收集這個(gè)字段也是空

TEMPORARY字段附帶說(shuō)明,N表示不是臨時(shí)表臨時(shí)表不需要收集

手動(dòng)收集有三種可選方式

1. 通過(guò)DBMS_STATS包中的方法

(GATHER_TABLE_STATS、GATHER_INDEX_STATS 或 GATHER_SCHEMA_STATS)

DBMS_STATS.GATHER_TABLE_STATS('SYSDBA','EMP',null,100,TRUE,'FOR ALL COLUMNS SIZE AUTO');

用戶、表、不是分區(qū)表名填寫(xiě)NULL默認(rèn)也是NULL區(qū)分大小寫(xiě)、采樣百分比、保留參數(shù)默認(rèn)寫(xiě)TRUE、控制列的統(tǒng)計(jì)信息集合和直方圖的創(chuàng)建的格式默認(rèn)填寫(xiě)FOR ALL COLUMNS SIZE AUTO表示所有列收集

或者:效果一樣

SP_TAB_STAT_INIT ('SYSDBA','EMP');

2、刪除指定表的統(tǒng)計(jì)信息

SP_TAB_STAT_DEINIT ('SYSDBA', 'DEPT');

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

explain select * from emp;

1、縮進(jìn)越深的越先執(zhí)行。

2、同樣縮進(jìn)的上面的先執(zhí)行,下面的后執(zhí)行。

3、上下的優(yōu)先級(jí)高于內(nèi)外。

達(dá)夢(mèng)sql執(zhí)行計(jì)劃、HINT、索引簡(jiǎn)單應(yīng)用,sql,數(shù)據(jù)庫(kù),服務(wù)器

?

常用執(zhí)行計(jì)劃操作符

CSCN2:聚集索引全表掃描

SSCN:直接使用二級(jí)索引進(jìn)行掃描

SSEK2:二級(jí)索引定位

CSEK2:聚集索引數(shù)據(jù)定位

BLKUP:二次回表

DISTINCT:除重

SLCT2:查詢條件過(guò)濾操作符

DSCN:動(dòng)態(tài)視圖表掃描

ESCN:外部表掃描

SORT2:排序

STAT:統(tǒng)計(jì)信息計(jì)算

PRJT2:關(guān)系的投影(project) 運(yùn)算,用于選擇表達(dá)式項(xiàng)的計(jì)算

PRJT2:投影運(yùn)算,選擇表達(dá)式的計(jì)算

exp_num:映射列數(shù)

is_atom:是否要求單行數(shù)據(jù)

NSET2 表示收集結(jié)果集的操作符

表連接:

HASH JOIN:HASH鏈接 --大表和大表關(guān)聯(lián)

NEST LOOP JOIN:嵌套循環(huán)連接 --小表和大表關(guān)聯(lián)

MERGE JOIN:MERGE鏈接

執(zhí)行順序方式(1-2-3-5 - 4-6 - 7-8-9): --有分支的上下優(yōu)先級(jí)最高

e1表二級(jí)索引掃描,e表全表掃描,e1根據(jù)索引二次回表查詢,嵌套循環(huán)連接(e和e1都是小表)組成新的表

d表二級(jí)索引掃描,d表根據(jù)索引二次回表查詢,前兩個(gè)表(e和e1)組成的小表再與d表嵌套循環(huán)

返回結(jié)果

統(tǒng)計(jì)指定sql執(zhí)行號(hào)的所有操作符的執(zhí)行時(shí)間

需要ini參數(shù):ENABLE_MONITOR=1、MONITOR_TIME=1 和 MONITOR_SQL_EXEC=1

MONITOR_SQL_EXEC為會(huì)話級(jí)動(dòng)態(tài)參數(shù),可以設(shè)置只針對(duì)當(dāng)前會(huì)話開(kāi)啟,不建議參數(shù)級(jí)別開(kāi)啟。

select SF_GET_PARA_VALUE(1,'MONITOR_SQL_EXEC');

SP_SET_PARA_VALUE(1,'MONITOR_SQL_EXEC',1);

SF_SET_SESSION_PARA_VALUE('MONITOR_SQL_EXEC',1);

SP_SET_PARA_VALUE(1,'ENABLE_MONITOR',1);

SP_SET_PARA_VALUE(1,'MONITOR_TIME',1);

ET( id_in bigint )

id_in sql執(zhí)行后產(chǎn)生的執(zhí)行號(hào)

HINT

DBA 對(duì)于數(shù)據(jù)分布是很清楚的,知道SQL語(yǔ)句按照哪種方法執(zhí)行會(huì)最快。

在這種情況下,DBA 可以主動(dòng)進(jìn)行人工干預(yù),指示優(yōu)化器按照指定的方法去選擇 SQL的執(zhí)行計(jì)劃。

人工干預(yù)優(yōu)化器的方法稱為 HINT。

它使優(yōu)化器根據(jù) DBA 的 HINT 提示來(lái)生成指定的執(zhí)行計(jì)劃。

如果優(yōu)化器無(wú)法生成相應(yīng)的執(zhí)行計(jì)劃,該 HINT 將會(huì)被忽略。

1)Hint格式

/*+ <具體的Hint內(nèi)容> */

2)Hint在SQL中必須緊跟關(guān)鍵字SELECT、INSERT、UPDATE、DELETE或MERGE之后

{SELECT | INSERT | UPDATE | DELETE | MERGE} /*+ <具體的Hint內(nèi)容> */

3)Hint中第一個(gè)星號(hào)(*)和加號(hào)(+)之間不能有空格

4)Hint中加號(hào)(+)和具體的Hint內(nèi)容之間可以有空格,也可以沒(méi)有空格,但通常都有空格。

5)Hint中的具體內(nèi)容可以是單個(gè)Hint,也可以是多個(gè)Hint的組合,各個(gè)Hint間至少需要1個(gè)空格來(lái)彼此分隔。

6)Hint中指定具體對(duì)象時(shí)(比如指定表名或者索引名),不能帶上該對(duì)象所在SCHEMA的名稱,即使該SQL文本中已經(jīng)有對(duì)應(yīng)的SCHEMA名稱。

explain select /*+ NO_INDEX(emp,EMP_IDX) */ * from sysdba.emp where EMPLOYEE_ID=100;

達(dá)夢(mèng)sql執(zhí)行計(jì)劃、HINT、索引簡(jiǎn)單應(yīng)用,sql,數(shù)據(jù)庫(kù),服務(wù)器

?

7)Hint中指定具體表名時(shí),如果該表在對(duì)應(yīng)SQL文本中有別名(alias),則應(yīng)該使用該表的別名。

explain select /*+ NO_INDEX(e,EMP_IDX) */ * from emp e where e.EMPLOYEE_ID=100;

達(dá)夢(mèng)sql執(zhí)行計(jì)劃、HINT、索引簡(jiǎn)單應(yīng)用,sql,數(shù)據(jù)庫(kù),服務(wù)器

?

支持使用 HINT 的 INI 參數(shù)可通過(guò) V$HINT_INI_INFO 動(dòng)態(tài)視圖查詢。

select * from v$hint_ini_info where para_name='ENABLE_HASH_JOIN';

并行操作:

SELECT /*+ PARALLEL(emp 4) */ * FROM emp;

或者:多個(gè)重復(fù)hint以最后一個(gè)為準(zhǔn)

SELECT /*+ PARALLEL(1) *//*+ PARALLEL(2) */ * FROM emp;

達(dá)夢(mèng)sql執(zhí)行計(jì)劃、HINT、索引簡(jiǎn)單應(yīng)用,sql,數(shù)據(jù)庫(kù),服務(wù)器

select SF_GET_PARA_VALUE(1,'PARALLEL_POLICY');

使用手動(dòng)并行模式時(shí),只需要在 INI 參數(shù)中設(shè)置好如下 2 個(gè)參數(shù),然后執(zhí)行并行 SQL查詢語(yǔ)句時(shí),需手動(dòng)指定當(dāng)前并行任務(wù)個(gè)數(shù)。

若不指定,將不使用并行。設(shè)置的 2 個(gè)參數(shù)如下:

PARALLEL_POLICY 2

PARALLEL_THRD_NUM 4

使用自動(dòng)并行模式時(shí),一般指定如下三個(gè)參數(shù):

MAX_PARALLEL_DEGREE 3

PARALLEL_POLICY 1

PARALLEL_THRD_NUM 10

另外,當(dāng) PARALLEL_POLICY 為 0 時(shí),即使有并行任務(wù),也不支持并行。

查詢計(jì)劃重用、結(jié)果集重用

DBA 可以通過(guò)在 SQL 語(yǔ)句中設(shè)置 "RESULT_CACHE"或"NO_RESULT_CACHE" HINT手動(dòng)指示查詢的結(jié)果集是否緩存。如:

explain select /*+ RESULT_CACHE */ * from emp where emp.employee_id=100;

或者

explain select /*+ NO_RESULT_CACHE */ * from emp where emp.employee_id=100;

創(chuàng)建emp和dep各插入大量數(shù)據(jù)

達(dá)夢(mèng)sql執(zhí)行計(jì)劃、HINT、索引簡(jiǎn)單應(yīng)用,sql,數(shù)據(jù)庫(kù),服務(wù)器

?

select * from emp,dep where emp.DEPARTMENT_ID=DEP.DEPARTMENT_ID and EMP.EMPLOYEE_ID=100;

?達(dá)夢(mèng)sql執(zhí)行計(jì)劃、HINT、索引簡(jiǎn)單應(yīng)用,sql,數(shù)據(jù)庫(kù),服務(wù)器

?

select /*+ RESULT_CACHE */ * from emp,dep where emp.DEPARTMENT_ID=DEP.DEPARTMENT_ID and EMP.EMPLOYEE_ID=100;

達(dá)夢(mèng)sql執(zhí)行計(jì)劃、HINT、索引簡(jiǎn)單應(yīng)用,sql,數(shù)據(jù)庫(kù),服務(wù)器

?

select /*+ NO_RESULT_CACHE */ * from emp,dep where emp.DEPARTMENT_ID=DEP.DEPARTMENT_ID and EMP.EMPLOYEE_ID=100;

達(dá)夢(mèng)sql執(zhí)行計(jì)劃、HINT、索引簡(jiǎn)單應(yīng)用,sql,數(shù)據(jù)庫(kù),服務(wù)器

本示例中結(jié)果集重用不重用本次基本沒(méi)效果。

示例

查看執(zhí)行計(jì)劃

explain select * from emp,dep where emp.DEPARTMENT_ID=DEP.DEPARTMENT_ID and EMP.EMPLOYEE_ID=100;

達(dá)夢(mèng)sql執(zhí)行計(jì)劃、HINT、索引簡(jiǎn)單應(yīng)用,sql,數(shù)據(jù)庫(kù),服務(wù)器

?

全是CSCN2全表掃描,且執(zhí)行計(jì)劃預(yù)估值偏差很大7221行實(shí)際返回10201行

1、收集統(tǒng)計(jì)信息:

select NUM_ROWS,LAST_ANALYZED,TEMPORARY from USER_TABLES where TABLE_NAME='EMP';

SP_TAB_STAT_INIT ('SYSDBA','EMP');

SP_TAB_STAT_INIT ('SYSDBA','DEP');

再次執(zhí)行

select * from emp,dep where emp.DEPARTMENT_ID=DEP.DEPARTMENT_ID and EMP.EMPLOYEE_ID=100;

達(dá)夢(mèng)sql執(zhí)行計(jì)劃、HINT、索引簡(jiǎn)單應(yīng)用,sql,數(shù)據(jù)庫(kù),服務(wù)器

?

這里基本沒(méi)效果:貌似因?yàn)椴皇菆?zhí)行計(jì)劃步驟問(wèn)題,雖然執(zhí)行計(jì)劃預(yù)估值有問(wèn)題,但是執(zhí)行計(jì)劃步驟沒(méi)問(wèn)題,不管是否收集統(tǒng)計(jì)信息均按執(zhí)行計(jì)劃步驟走,所以這里效果不明顯。

3、對(duì)sql搜集統(tǒng)計(jì)信息

--先創(chuàng)建索引后又收集sql統(tǒng)計(jì)信息

SP_SQL_STAT_INIT ('select * from emp,dep where emp.DEPARTMENT_ID=DEP.DEPARTMENT_ID and EMP.EMPLOYEE_ID=100');

explain select * from emp,dep where emp.DEPARTMENT_ID=DEP.DEPARTMENT_ID and EMP.EMPLOYEE_ID=100;

達(dá)夢(mèng)sql執(zhí)行計(jì)劃、HINT、索引簡(jiǎn)單應(yīng)用,sql,數(shù)據(jù)庫(kù),服務(wù)器

?

select * from emp,dep where emp.DEPARTMENT_ID=DEP.DEPARTMENT_ID and EMP.EMPLOYEE_ID=100;

達(dá)夢(mèng)sql執(zhí)行計(jì)劃、HINT、索引簡(jiǎn)單應(yīng)用,sql,數(shù)據(jù)庫(kù),服務(wù)器

?

效果顯著

2、添加索引

create index emp_idx on emp(EMPLOYEE_ID);

create index dep_idx on dep(DEPARTMENT_ID);

達(dá)夢(mèng)sql執(zhí)行計(jì)劃、HINT、索引簡(jiǎn)單應(yīng)用,sql,數(shù)據(jù)庫(kù),服務(wù)器

?

效果非常明顯

達(dá)夢(mèng)sql執(zhí)行計(jì)劃、HINT、索引簡(jiǎn)單應(yīng)用,sql,數(shù)據(jù)庫(kù),服務(wù)器

?

使用優(yōu)化器提示HINT

需要注意的是:如果 HINT 的語(yǔ)法沒(méi)有寫(xiě)對(duì)或指定的值不正確,DM 并不會(huì)報(bào)錯(cuò),而是直接忽略 HINT 繼續(xù)執(zhí)行。

支持 HINT 的INI 參數(shù)分為兩類:

一是 HINT_TYPE 為"OPT",表示分析階段使用的參數(shù);

二是HINT_TYPE為"EXEC",表示運(yùn)行階段使用的參數(shù),運(yùn)行階段使用的參數(shù)對(duì)于視圖無(wú)效。

explain select * from emp,dep where emp.DEPARTMENT_ID=DEP.DEPARTMENT_ID and EMP.EMPLOYEE_ID=100;

達(dá)夢(mèng)sql執(zhí)行計(jì)劃、HINT、索引簡(jiǎn)單應(yīng)用,sql,數(shù)據(jù)庫(kù),服務(wù)器

?

不使用hash join連接

explain select /*+ ENABLE_HASH_JOIN(0) */ * from emp,dep where emp.DEPARTMENT_ID=DEP.DEPARTMENT_ID and EMP.EMPLOYEE_ID=100;

達(dá)夢(mèng)sql執(zhí)行計(jì)劃、HINT、索引簡(jiǎn)單應(yīng)用,sql,數(shù)據(jù)庫(kù),服務(wù)器

?

EXPLAIN SELECT /*+ ENABLE_HASH_JOIN(1) */ * FROM T1,T2 WHERE T1.C1 = T2.D1; --這個(gè)還是next loop嵌套循環(huán)啊

使用了 HINT,指明在執(zhí)行此 SQL 時(shí)參數(shù) ENABLE_HASH_JOIN 被置為 1。

SELECT /*+ INDEX(T1, IDX_T1_ID) */ * FROM T1 ;

SELECT /*+ INDEX(A IDX_T1_NAME)*/ * FROM T1 A WHERE ID > 2011 AND NAME < 'XXX' ORDER BY NAME;

explain select /*+ NO_INDEX(EMP,EMP_IDX) */ * from emp,dep where emp.DEPARTMENT_ID=DEP.DEPARTMENT_ID and EMP.EMPLOYEE_ID=100;

達(dá)夢(mèng)sql執(zhí)行計(jì)劃、HINT、索引簡(jiǎn)單應(yīng)用,sql,數(shù)據(jù)庫(kù),服務(wù)器

?

EXPLAIN SELECT /*+ USE_HASH(T1,T2) */ * FROM T1,T2 WHERE T1.C1 = T2.D1; --這個(gè)才是使用hash連接

EXPLAIN SELECT /*+ NO_USE_HASH(T1,T2) */ * FROM T1, T2 WHERE T1.C1 = T2.D1; --不使用hash連接

explain select /*+ NO_USE_HASH(emp,dep) */ * from emp,dep where emp.DEPARTMENT_ID=DEP.DEPARTMENT_ID and EMP.EMPLOYEE_ID=100; --這個(gè)沒(méi)效果

達(dá)夢(mèng)sql執(zhí)行計(jì)劃、HINT、索引簡(jiǎn)單應(yīng)用,sql,數(shù)據(jù)庫(kù),服務(wù)器

?

--強(qiáng)制兩個(gè)表間使用嵌套循環(huán)連接

EXPLAIN SELECT /*+ USE_NL(A, B) */ * FROM T1 A, T2 B WHERE A.C1 = B.D1;

explain select /*+ USE_NL(emp,dep) */ * from emp,dep where emp.DEPARTMENT_ID=DEP.DEPARTMENT_ID and EMP.EMPLOYEE_ID=100;

達(dá)夢(mèng)sql執(zhí)行計(jì)劃、HINT、索引簡(jiǎn)單應(yīng)用,sql,數(shù)據(jù)庫(kù),服務(wù)器

?

NO_USE_NL 強(qiáng)制兩個(gè)表間不能使用嵌套循環(huán)連接

USE_NL_WITH_INDEX 當(dāng)連接情況為左表+右表索引時(shí),強(qiáng)制兩個(gè)表間使用索引連接

EXPLAIN SELECT /*+ USE_NL_WITH_INDEX(T1, IDX_T1_C1) */ * FROM T1, T2 WHERE T1.C1 = T2.D1;

NO_USE_NL_WITH_INDEX 當(dāng)連接情況為左表+右表索引時(shí),強(qiáng)制兩個(gè)表間不能使用索引連接

USE_MERGE強(qiáng)制兩個(gè)表間使用歸并連接。歸并連接所用的兩個(gè)列都必須是索引列。

NO_USE_MERGE強(qiáng)制兩個(gè)表間不能使用歸并連接

等。

貌似還可以直接指定dm.ini文件中的參數(shù)

select * from v$hint_ini_info where para_name='VIEW_PULLUP_FLAG';

達(dá)夢(mèng)sql執(zhí)行計(jì)劃、HINT、索引簡(jiǎn)單應(yīng)用,sql,數(shù)據(jù)庫(kù),服務(wù)器

?

explain select /*+ VIEW_PULLUP_FLAG(3) */ * from v_emp;

達(dá)夢(mèng)sql執(zhí)行計(jì)劃、HINT、索引簡(jiǎn)單應(yīng)用,sql,數(shù)據(jù)庫(kù),服務(wù)器

?

索引

創(chuàng)建索引

create index emp_idx on emp(employee_id);

select name,id,subtype$ from sysobjects where subtype$='INDEX' and name='EMP_IDX';

索引占用空間(頁(yè)數(shù))

select index_used_space(33555482);

索引使用頁(yè)數(shù)

select index_used_pages(33555482);

指定聚集索引鍵:--每張表中只允許有一個(gè)聚集索引

1. CLUSTER PRIMARY KEY:指定列為聚集索引鍵,并同時(shí)指定為主鍵,稱為聚集主鍵;

2. CLUSTER KEY:指定列為聚集索引鍵,但是是非唯一的;

3. CLUSTER UNIQUE KEY:指定列為聚集索引鍵,并且是唯一的。

查詢主鍵(聚簇索引鍵并刪除修改)

SELECT CONSTRAINT_NAME,TABLE_NAME FROM ALL_CONSTRAINTS WHERE CONSTRAINT_TYPE='P' and TABLE_NAME='EMP1';

alter table emp1 drop constraint "CONS134218794"; --主鍵可以直接刪,聚集主鍵不能直接刪,需要再創(chuàng)建一個(gè)聚集主鍵而使其變?yōu)榉蔷奂麈I后再刪。(create cluster index name_dept on dept(name); )

達(dá)夢(mèng)sql執(zhí)行計(jì)劃、HINT、索引簡(jiǎn)單應(yīng)用,sql,數(shù)據(jù)庫(kù),服務(wù)器

?

達(dá)夢(mèng)sql執(zhí)行計(jì)劃、HINT、索引簡(jiǎn)單應(yīng)用,sql,數(shù)據(jù)庫(kù),服務(wù)器

?

create cluster index emp_c_idx on emp1(employee_name);

--創(chuàng)建聚集主鍵后上面創(chuàng)建的聚集索引 自動(dòng)刪除了。

--創(chuàng)建聚集索引后上面創(chuàng)建的聚集主鍵 沒(méi)有自動(dòng)刪除,但是可以執(zhí)行手動(dòng)刪除了。

達(dá)夢(mèng)sql執(zhí)行計(jì)劃、HINT、索引簡(jiǎn)單應(yīng)用,sql,數(shù)據(jù)庫(kù),服務(wù)器

?

管理索引

索引分類:

物理存儲(chǔ)角度

聚集索引:表數(shù)據(jù)存儲(chǔ)在 B 樹(shù)葉子節(jié)點(diǎn)上,定位索引可直接在B樹(shù)中找到數(shù)據(jù)。每一個(gè)表有且只有一個(gè)聚集索引。同一張表創(chuàng)建另一個(gè)聚集索引時(shí),前一個(gè)貌似會(huì)被自動(dòng)刪除。

非聚集索引:二級(jí)索引列和聚集索引列共同存儲(chǔ)在B 樹(shù)葉子節(jié)點(diǎn)上。如果查找索引鍵值以外的數(shù)據(jù),則需要回到一級(jí)索引中進(jìn)行查找。每一個(gè)表可以有多個(gè)非聚集索引。

create cluster index EMP1 on t1(EMPLOYEE_NAME); --聚集索引

create index s1 on EMP1(EMPLOYEE_ID); --非聚集索引

==

select name,id,subtype$ from sysobjects where subtype$='INDEX' and name='EMP_C_IDX';

SELECT CONSTRAINT_NAME,TABLE_NAME FROM ALL_CONSTRAINTS WHERE CONSTRAINT_TYPE='P' and TABLE_NAME='EMP1'; --聚集索引不是約束,這里查不到,之前創(chuàng)建主鍵或者聚集主鍵時(shí)是約束

==

功能角度分類

可分為唯一索引、函數(shù)索引、位圖索引、位圖連接索引、全文索引、空間索引、數(shù)組索引、普通索引。

虛實(shí)角度分類

分為虛索引和實(shí)索引。

虛索引:創(chuàng)建 PRIMARY KEY 主鍵約束或 UNIQUE 唯一約束時(shí),系統(tǒng)會(huì)自動(dòng)創(chuàng)建一個(gè)相關(guān)的唯一索引。因?yàn)椴恍枰脩魟?chuàng)建,因此稱為虛索引。

實(shí)索引:虛索引以外的索引均為實(shí)索引。

索引鍵值個(gè)數(shù)分類:

單列索引和復(fù)合索引。

分區(qū)的角度進(jìn)行分類:

全局索引和局部索引。全局索引和局部索引均為二級(jí)索引,專門(mén)用于水平分區(qū)表中。

全局索引 (GLOBAL) 是以整張表的數(shù)據(jù)為對(duì)象而建立的索引。全局索引的日常維護(hù)成本高于局部索引。

全局索引具體分為兩種:全局非分區(qū)索引全局分區(qū)索引。指定了<PARTITION 子句>的索引即為分區(qū)索引。只有 DMDPC 功能支持分區(qū)索引。

創(chuàng)建全局非分區(qū)索引

create index part_dept_idx on dept_part(id) global;

explain select * from dept_part where id = 2; --全局分區(qū)索引查詢

explain select * from dept_part partition (p2022) where id = 2; --直接對(duì)分區(qū)子表查詢,則使用全局本地索引

創(chuàng)建全局分區(qū)索引

create index part_dept_idx_f on dept_part(name) global partition by range(name)

(

partition p1 values less than (100) storage(on TS_HR_IDX),

partition p2 values less than (maxvalue) storage(on TS_HR_IDX)

);

explain select * from dept_part where name = 'dd'; //當(dāng)數(shù)據(jù)量很大時(shí)

explain select * from dept_part index part_dept_idx_f where name = 'dd'; //或直接指定全局索引

explain select * from DEPT_PART partition (p2022) where name = 'dd'; //直接對(duì)分區(qū)子表查詢,則使用全局本地索引

局部索引:局部索引是在分區(qū)表的每個(gè)分區(qū)上創(chuàng)建的索引。

未指定 GLOBAL 關(guān)鍵字創(chuàng)建的索引即為局部索引。局部索引暫時(shí)不支持分區(qū)。創(chuàng)建局部索時(shí),會(huì)在水平分區(qū)表的主表上創(chuàng)建局部索引和在每個(gè)子表上創(chuàng)建一個(gè)子表局部索引。索引數(shù)據(jù)存儲(chǔ)在子表局部索引上。

創(chuàng)建局部索引

必須缺省 GLOBAL 關(guān)鍵字

create index idx1 on dept_part(name)

storage(on TS_HR_IDX);

在 WHERE 中指定索引列,可使用索引 idx1 查詢

explain select * from t1 where name = 'dd';

直接對(duì)分區(qū)子表查詢,則使用子表局部索引

explain select * from DEPT_PART partition (p2022) where name = 'dd';

創(chuàng)建聚集索引

create cluster index clu_emp_name on emp(ename);

若指定索引鍵,表中數(shù)據(jù)都會(huì)根據(jù)指定索引鍵排序。

建表后,DM8 也可以用創(chuàng)建新聚集索引的方式來(lái)重建表數(shù)據(jù),并按新的聚集索引排序。

新建聚集索引會(huì)重建這個(gè)表以及其所有索引,代價(jià)非常大的操作。

創(chuàng)建唯一索引

create unique index dept_unique_index on dept(dname);

位圖索引:

針對(duì)含有大量相同值的列而創(chuàng)建。

索引查詢

SELECT CONSTRAINT_NAME,INDEX_NAME,TABLE_NAME FROM ALL_CONSTRAINTS WHERE CONSTRAINT_NAME= 'CONS134218800';

SELECT CONSTRAINT_NAME,INDEX_NAME,TABLE_NAME FROM ALL_CONSTRAINTS WHERE CONSTRAINT_TYPE='P' and TABLE_NAME='EMP2';

SELECT INDEX_NAME,UNIQUENESS FROM ALL_INDEXES WHERE INDEX_NAME='INDEX33555495';

重建索引

當(dāng)一個(gè)表經(jīng)過(guò)大量的增刪改操作后,表的數(shù)據(jù)在物理文件中可能存在大量碎片,從而影響訪問(wèn)速度。

sp_rebuild_index(schema_name varchar(256),index_id int);

select name,id,subtype$ from sysobjects where subtype$='INDEX' and name='EMP_IDX';

sp_rebuild_index('SYSDBA',33555482);

刪除索引

DROP INDEX IF EXISTS emp_ename;

不能直接刪除與已啟用的 UNIQUE KEY 鍵或 PRIMARY KEY 鍵約束相關(guān)的索引。要?jiǎng)h除一個(gè)與約束相關(guān)的索引,必須停用或刪除該約束本身。

ALTER TABLE emp DROP CONSTRAINT pk_emp_name;

刪除 emp 表的聚集索引

DROP INDEX clu_emp_name;

刪除表就自動(dòng)刪除了所有與其相關(guān)的索引。

查看索引信息

INDEXDEF(INDEX_ID int, PREFLAG int); --PREFLAG 表示返回信息中是否增加模式名前綴。

select name,id,subtype$ from sysobjects where subtype$='INDEX' and name='EMP_IDX';

SELECT INDEXDEF(33555482,0);

select * from SYSINDEXES where id=33555482;文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-555372.html

到了這里,關(guān)于達(dá)夢(mèng)sql執(zhí)行計(jì)劃、HINT、索引簡(jiǎn)單應(yīng)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • MongoDB索引操作和執(zhí)行計(jì)劃Explain()詳解

    MongoDB索引操作和執(zhí)行計(jì)劃Explain()詳解

    主要是講下Mongodb的索引的查看、創(chuàng)建、刪除、類型說(shuō)明,還有就是Explain執(zhí)行計(jì)劃的解釋說(shuō)明。? ? 可以轉(zhuǎn)載,但請(qǐng)注明出處。 ?? 之前自己寫(xiě)的SpringBoot整合MongoDB的聚合查詢操作,感興趣的可以點(diǎn)擊查閱。 https://www.cnblogs.com/zaoyu/p/springboot-mongodb.html 數(shù)組相關(guān)的操作 https://ww

    2024年02月13日
    瀏覽(48)
  • 【SQL Server】數(shù)據(jù)庫(kù)開(kāi)發(fā)指南(六)索引和視圖的使用技巧、方法與綜合應(yīng)用

    【SQL Server】數(shù)據(jù)庫(kù)開(kāi)發(fā)指南(六)索引和視圖的使用技巧、方法與綜合應(yīng)用

    本系列博文還在更新中,收錄在專欄:#MS-SQL Server 專欄中。 本系列文章列表如下: 【SQL Server】 Linux 運(yùn)維下對(duì) SQL Server 進(jìn)行安裝、升級(jí)、回滾、卸載操作 【SQL Server】數(shù)據(jù)庫(kù)開(kāi)發(fā)指南(一)數(shù)據(jù)庫(kù)設(shè)計(jì)的核心概念和基本步驟 【SQL Server】數(shù)據(jù)庫(kù)開(kāi)發(fā)指南(二)MSSQL數(shù)據(jù)庫(kù)開(kāi)發(fā)對(duì)

    2024年02月06日
    瀏覽(126)
  • 達(dá)夢(mèng)數(shù)據(jù)庫(kù)(dm8)導(dǎo)出sql文件

    達(dá)夢(mèng)數(shù)據(jù)庫(kù)(dm8)導(dǎo)出sql文件

    1.新建遷移工程 2.右鍵進(jìn)行新建遷移 3.選擇DM== SQL 后進(jìn)行下一步 4.輸入口令后繼續(xù)下一步 5.定義腳本文件可選擇自己新建的sql空文件,編碼使用UTF-8 選擇自己要導(dǎo)出的模式 7.選擇導(dǎo)出的表 使用反選可以進(jìn)行全選 8.點(diǎn)擊完成進(jìn)行遷移 也可以使用其他方式進(jìn)行導(dǎo)出,如DM管理工具

    2024年02月11日
    瀏覽(22)
  • 達(dá)夢(mèng)數(shù)據(jù)庫(kù)(DM8)常用SQL學(xué)習(xí)

    達(dá)夢(mèng)數(shù)據(jù)庫(kù)(DM8)常用SQL學(xué)習(xí)

    達(dá)夢(mèng)產(chǎn)品手冊(cè) 從輸出結(jié)果看出,用戶狀態(tài) account_status 為 open,輸出的時(shí)間為用戶的創(chuàng)建時(shí)間。 注意:windows系統(tǒng)在DM管理工具中使用該命令無(wú)法完成用戶切換,直接斷開(kāi)登錄后重新連接,更換登錄用戶即可。 通過(guò)觸發(fā)器腳本實(shí)現(xiàn) 解析 UPDATE_TIME_CUSTOM_NAME:觸發(fā)名稱 DEV: 模式名

    2024年02月01日
    瀏覽(25)
  • SQL 執(zhí)行計(jì)劃管理(SPM)

    SQL 執(zhí)行計(jì)劃管理(SPM)

    任何數(shù)據(jù)庫(kù)應(yīng)用程序的性能在很大程度上都依賴于查詢執(zhí)行,盡管優(yōu)化器無(wú)需用戶干預(yù)就可以評(píng)估最佳計(jì)劃,但是 SQL 語(yǔ)句的執(zhí)行計(jì)劃仍可能由于以下多種原因發(fā)生意外更改:版本升級(jí)、重新收集優(yōu)化器統(tǒng)計(jì)信息、改變優(yōu)化器參數(shù)或模式/元數(shù)據(jù)定義。由于無(wú)法保證計(jì)劃始終向

    2024年02月14日
    瀏覽(20)
  • SQL優(yōu)化之EXPLAIN執(zhí)行計(jì)劃

    SQL優(yōu)化之EXPLAIN執(zhí)行計(jì)劃

    從今天開(kāi)始本系列文章就帶各位小伙伴學(xué)習(xí)數(shù)據(jù)庫(kù)技術(shù)。 數(shù)據(jù)庫(kù)技術(shù)是Java開(kāi)發(fā)中必不可少的一部分知識(shí)內(nèi)容。也是非常重要的技術(shù)。本系列教程由淺入深, 全面講解數(shù)據(jù)庫(kù)體系。 非常適合零基礎(chǔ)的小伙伴來(lái)學(xué)習(xí)。 全文大約 【1965】字 ,不說(shuō)廢話,只講可以讓你學(xué)到技術(shù)、明

    2024年02月07日
    瀏覽(37)
  • DM8:達(dá)夢(mèng)數(shù)據(jù)庫(kù)開(kāi)啟SQL日志sqllog

    DM8:達(dá)夢(mèng)數(shù)據(jù)庫(kù)開(kāi)啟SQL日志sqllog

    在使用數(shù)據(jù)庫(kù)過(guò)程中,有時(shí)候想要查看數(shù)據(jù)庫(kù)執(zhí)行的SQL日志,由于V$SESSIONS 系統(tǒng)視圖默認(rèn)保留10000條,不滿足需求,可以配置開(kāi)啟SQLLOG; 登陸達(dá)夢(mèng)數(shù)據(jù)庫(kù)管理工具或 disql 執(zhí)行命令 開(kāi)啟后注意觀察數(shù)據(jù)庫(kù)log目錄的dmsql開(kāi)頭的日志文件,是否達(dá)到256MB后正常切換,達(dá)到20個(gè)日志文件

    2024年02月10日
    瀏覽(98)
  • 達(dá)夢(mèng)數(shù)據(jù)庫(kù) SQL 錯(cuò)誤 [22000]:列[xxx]長(zhǎng)度超出定義——筆記

    今天碰到一個(gè)看表結(jié)構(gòu)字段長(zhǎng)度是夠的;但是執(zhí)行sql的時(shí)候報(bào)字段長(zhǎng)度不夠的問(wèn)題;記錄一下 大概場(chǎng)景就是新增一條數(shù)據(jù),在插入數(shù)據(jù)庫(kù)的時(shí)候,一個(gè)varchar字段在報(bào) SQL 錯(cuò)誤 [22000]:列[xxx]長(zhǎng)度超出定義 把這個(gè)字段拿出來(lái)單獨(dú)查 LENGTH() 函數(shù),長(zhǎng)度是在字段長(zhǎng)度范圍內(nèi)的; 后來(lái)

    2024年02月08日
    瀏覽(61)
  • 【REST2SQL】05 GO 操作 達(dá)夢(mèng) 數(shù)據(jù)庫(kù)

    【REST2SQL】05 GO 操作 達(dá)夢(mèng) 數(shù)據(jù)庫(kù)

    【REST2SQL】01RDB關(guān)系型數(shù)據(jù)庫(kù)REST初設(shè)計(jì) 【REST2SQL】02 GO連接Oracle數(shù)據(jù)庫(kù) 【REST2SQL】03 GO讀取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版實(shí)現(xiàn) 信創(chuàng)要求用國(guó)產(chǎn)數(shù)據(jù)庫(kù),剛好有項(xiàng)目用的達(dá)夢(mèng),研究一下go如何操作達(dá)夢(mèng)數(shù)據(jù)庫(kù) 登錄 達(dá)夢(mèng) 官網(wǎng),有DM8開(kāi)發(fā)版可以下載,我下載的是X86,Win

    2024年02月01日
    瀏覽(19)
  • 使用sql profile 穩(wěn)定執(zhí)行計(jì)劃的案例

    接上次一次hard parse處理過(guò)程 自從為了解決hard parse的問(wèn)題而設(shè)置了cursor_sharing=force后,又衍生了其他的問(wèn)題,那就是執(zhí)行計(jì)劃的穩(wěn)定性,如下記錄發(fā)生的一起強(qiáng)制綁定變量后引起的執(zhí)行計(jì)劃綁定的問(wèn)題 用戶反映早上接數(shù)據(jù)變得很慢,使用如下sql檢查該時(shí)段最頻繁的sql 在跟系統(tǒng)

    2024年02月09日
    瀏覽(21)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包