oracle怎么通過索引查詢數據語句
oracle對于數據庫中的表信息,存儲在系統表中。
查詢已創建好的表索引,可通過相應的sql語句到相應的表中進行快捷的查詢:1. 根據表名,查詢一張表的索引select * from user_indexes where table_name=upper('表名');2. 根據索引號,查詢表索引字段select * from user_ind_columns where index_name=('索引名');3.根據索引名,查詢創建索引的語句select dbms_*_ddl('INDEX','索引名', ['用戶名']) from dual ; --['用戶名']可省,默認為登錄用戶PS:dbms_*_ddl還可以得到建表語句,如:SELECT DBMS_*_DDL('TABLE','表名', ['用戶名']) FROM DUAL ; //取單個表的建表語句,['用戶名']可不輸入,默認為登錄用戶SELECT DBMS_*_DDL('TABLE',*_name) FROM USER_TABLES u; //取用戶下所有表的建表語句當然,也可以用pl/sql developer工具來查看相關的表的各種信息。
ORACLE下如何獲得全部的索引創建語句
今天打算將一個數據庫的索引在另一個測試庫上重新創建一遍,研究了一下。
set pagesize 0 set long 90000 set feedback off set echo off spool all_* SELECT DBMS_*_DDL('INDEX',*_name) FROM USER_INDEXES u;spool off;最后找個編輯器替換一下表空間名,在表空間名后面加上個; 然后讓ORACLE慢慢執行吧 其實是調用DBMS_*_DDL這個外部過程來獲得創建DLL語句,還能獲得很多東西 這個是所有用戶的創建DLL SELECT DBMS_*_DDL('USER',*me) FROM DBA_USERS U; 這個是所有表的DLL SELECT DBMS_*_DDL('TABLE',*_name) FROM USER_TABLES u; 所有表空間的DLL SELECT DBMS_*_DDL('TABLESPACE', *pace_name) FROM DBA_TABLESPACES TS; 組合一下,所有表,索引存儲過程 SELECT DBMS_*_DDL(*_TYPE, *_name) FROM USER_OBJECTS u where *_TYPE IN ('TABLE','INDEX','PROCEDURE');另外一個相關的語句生成刪除某個用戶全部索引的語句。
oracle怎么通過索引查詢數據語句
oracle對于數據庫中的表信息,存儲在系統表中。查詢已創建好的表索引,可通過相應的sql語句到相應的表中進行快捷的查詢:
1. 根據表名,查詢一張表的索引
select * from user_indexes where table_name=upper('表名');
2. 根據索引號,查詢表索引字段
select * from user_ind_columns where index_name=('索引名');
3.根據索引名,查詢創建索引的語句
select dbms_*_ddl('INDEX','索引名', ['用戶名']) from dual ; --['用戶名']可省,默認為登錄用戶
PS:dbms_*_ddl還可以得到建表語句,如:
SELECT DBMS_*_DDL('TABLE','表名', ['用戶名']) FROM DUAL ; //取單個表的建表語句,['用戶名']可不輸入,默認為登錄用戶
SELECT DBMS_*_DDL('TABLE',*_name) FROM USER_TABLES u; //取用戶下所有表的建表語句
當然,也可以用pl/sql developer工具來查看相關的表的各種信息。
ORACLE下如何獲得全部的索引創建語句
今天打算將一個數據庫的索引在另一個測試庫上重新創建一遍,研究了一下。
set pagesize 0
set long 90000
set feedback off
set echo off
spool all_*
SELECT DBMS_*_DDL('INDEX',*_name)
FROM USER_INDEXES u;spool off;最后找個編輯器替換一下表空間名,在表空間名后面加上個;
然后讓ORACLE慢慢執行吧
其實是調用DBMS_*_DDL這個外部過程來獲得創建DLL語句,還能獲得很多東西
這個是所有用戶的創建DLL
SELECT DBMS_*_DDL('USER',*me)
FROM DBA_USERS U;
這個是所有表的DLL
SELECT DBMS_*_DDL('TABLE',*_name)
FROM USER_TABLES u;
所有表空間的DLL
SELECT DBMS_*_DDL('TABLESPACE', *pace_name)
FROM DBA_TABLESPACES TS;
組合一下,所有表,索引存儲過程
SELECT DBMS_*_DDL(*_TYPE, *_name)
FROM USER_OBJECTS u
where *_TYPE IN ('TABLE','INDEX','PROCEDURE');另外一個相關的語句生成刪除某個用戶全部索引的語句
怎樣用Oracle取得建表和索引的DDL語句
從數據字典中獲得DDL語句是經常要用的,特別是在系統升級/重建的時候。
在Oracle 9i中,我們可以直接通過執行dbms_metadata從數據字典中查處DDL語句。使用這個功能強大的工具,我們可以獲得單個對象或整個SCHEMA的DDL語句。
最好不過的是因為它使用起來很簡單。 1、獲得單個表和索引DDL語句的方法: set heading off;set echo off;Set pages 999;set long 90000;spool get_single。
sqlselect dbms_metadata。 get_ddl('TABLE','SZT_PQSO2','SHQSYS') from dual;select dbms_metadata。
get_ddl('INDEX','INDXX_PQZJYW','SHQSYS') from dual; spool off;下面是輸出。 我們只要把建表/索引語句取出來在后面加個分號就可以直接運行了。
SQL> select dbms_metadata。get_ddl('TABLE','SZT_PQSO2','SHQSYS') from dual; CREATE TABLE "SHQSYS"。
"SZT_PQSO2" ( "PQBH" VARCHAR2(32) NOT NULL ENABLE, "ZJYW" NUMBER(10,0), "CGSO" NUMBER(10,0) NOT NULL ENABLE, "SOLS" VARCHAR2(17), "SORQ" VARCHAR2(8), "SOWR" VARCHAR2(8), "SOCL" VARCHAR2(6), "YWHM" VARCHAR2(10), "YWLX" VARCHAR2(6) ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE(INITIAL 1048576 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "DATA1" SQL> select dbms_metadata。 get_ddl ('INDEX','INDXX_PQZJYW','SHQSYS') from dual;CREATE INDEX "SHQSYS"。
"INDXX_PQZJYW" ON "SHQSYS"。"SZT_PQSO2" ("ZJYW") PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 1048576 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "DATA1" SQL> SQL> spool off;2、獲得整個SCHEMA DDL語句的方法: set pagesize 0set long 90000set feedback offset echo off spool get_schema。
sql connect shqsys/shqsys@hawk1;SELECT DBMS_METADATA。GET_DDL('TABLE',u。
table_name)FROM USER_TABLES u;SELECT DBMS_METADATA。 GET_DDL('INDEX',u。
index_name)FROM USER_INDEXES u;spool off;需要注意的是,當我們的表中有外健(參照約束)時,我們需要判別參照表之間的順序,確保重建時按照合理的順序進行。你可以通過查詢dba_constraints and dba_cons_columns來確定各表之間的順序,不再詳述。
以上是我對于這個問題的解答,希望能夠幫到大家。
Oracle表、索引修改表空間語句指的是什么
表做空間遷移時,使用如下語句: 例1:alter table tb_name move tablespace tbs_name; 索引表空間做遷移,使用如下語句: 例2:alter index index_name rebuild tablespace tbs_name; 對于含有lob字段的表,在建立時,oracle會自動為lob字段建立兩個單獨的segment,一個用來存放數據,另一個用來存放索引,并且它們都會存儲在對應表指定的表空間中,而例1:只能移動非lob字段以外的數據,所以在對含有lob字段的表進行空間遷移,需要使用如下語句: 例3:alter table tb_name move tablespace tbs_name lob (col_lob1,col_lob2) store as(tablesapce tbs_name); 項目實例: 表空間遷移 select 'alter table' ||table_name|| 'move tablespace tbs_name;' table_name from dba_tables where owner='%***%' and table_name like '%***%' 帶lob字段 select 'alter table' ||table_name|| 'move lob('||index_name||') store as (tablespace tbs_name);' from dba_indexes where owner='%***%' and index_name like '%***%' 索引表空間 select 'alter index' ||index_name|| 'rebuild tablespace tbs_name;' index_name from dba_indexes where owner='%***%' and table_name like '%***%' 以上在oracle 的SQL*Plus Worksheet中運行,將得出的運行結果再運行一次即可。
oracle的索引有幾種
Oracle 提供了多種不同類型的索引以供使用。
簡單地說, Oracle 中包括如下索引:1、 B* 樹索引 這些是我所說的 “ 傳統 “ 索引。到目前為止,這是 Oracle 和大多數其他數據庫中最常用的索引。
B* 樹的構造類似于二叉樹,能根據鍵提供一行或一個行集的快速訪問,通常只需很少的讀操作就能找到正確的行。不過,需要注意重要的一點, ” B* 樹 “ 中的 ” B “ 不代表二叉( binary ),而代表平衡( b alanced )。
B* 樹索引并不是一顆二叉樹,這一點在介紹如何在磁盤上物理地存儲 B* 樹時就會了解到。 B* 樹索引有以下子類型:索引組織表( index organized table ):索引組織表以 B* 樹結構存儲。
堆表的數據行是以一種無組織的方式存儲的(只要有可用的空間,就可以放數據),而 IOT 與之不同, IOT 中的數據要按主鍵的順序存儲和排序。對應用來說, IOT 表現得與 “ 常規 “ 表并無二致;需要使用 SQL 來正確地訪問 IOT 。
IOT 對信息獲取、空間系統和 OLAP 應用最為有用。 IOT 在上一章已經詳細地討論過。
B*樹聚簇索引( B*tree cluster index )這些是傳統 B* 樹索引的一個變體(只是稍有變化)。 B* 樹聚簇索引用于對聚簇鍵建立索引(見第 11. 章中 “ 索引聚簇表 “ 一節),所以這一章不再討論。
在傳統 B* 樹中 ,鍵都指向一行;而 B* 樹聚簇不同,一個聚簇鍵會指向一個塊,其中包含與這個聚簇鍵相關的多行。降序索引( descending index ):降序索引允許數據在索引結構中按 “ 從大到小 “ 的順序(降序)排序,而不是按 ” 從小到大 “ 的順序(升序)排序。
我們會解釋為什么降序索引很重要,并說明降序索引如何工作。反向鍵索引( reverse key index ):這也是 B* 樹索引,只不過鍵中的字節會 “ 反轉 “ 。
利用反向鍵索引,如果索引中填充的是遞增的值,索引條目在索引中可以得到更均勻的分布。例如,如果使用一個序列來生成主鍵,這個序列將生成諸如 987500 、 987501 、 987502 等值。
這些值是順序的,所以倘若使用一 個傳統的 B* 樹索引,這些值就可能放在同一個右側塊上,這就加劇了對這一塊的競爭。利用反向鍵, Oracl e則會邏輯地對 205789 、 105789 、 005789 等建立索引。
Oracle 將數據放在索引中之前,將先 把所存儲數據的字節反轉,這樣原來可能在索引中相鄰放置的值在字節反轉之后就會相距很遠。通過反轉字節,對索引的插入就會分布到多個塊上。
2、 位圖索引( bitmap index ) 在一顆 B* 樹中,通常索引條目和行之間存在一種一對一的關系:一個 索引條目就指向一行。而對于位圖索引,一個索引條目則使用一個位圖同時指向多行。
位圖索引適用于高度重復而且通常只讀的數據(高度重復是指相對于表中的總行數,數據只有很少的幾個不同值)。考慮在一 個有 100 萬行的表中,每個列只有 3 個可取值: Y 、 N 和 NULL 。
舉例來說,如果你需要頻繁地統計多少行有值Y ,這就很適合建立位圖索引。不過并不是說如果這個表中某一列有 11.000 個不同的值就不能建立位圖索引,這一列當然也可以建立 位圖索引。
在一個 OLTP 數據庫中,由于存在并發性相關的問題,所以不能考慮使用位圖索引(后面我們就會討論這一點)。注意,位圖索引要求使用 Oracle 企業版或個人版。
位圖聯結索引( bitmap join index ):這為索引結構(而不是表)中的數據提供了一種逆規范化的 方法。例如,請考慮簡單的 EMP 和 DEPT 表。
有人可能會問這樣一個問題: “ 多少人在位于波士頓的部門工作 ?“ EMP 有一個指向 DEPT 的外鍵,要想統計 LOC 值為 Boston 的部門中的員工人數,通常必須完成表聯結,將 LOC 列聯結至 EMP 記錄來回答這個問題。通過使用位圖聯結索引,則可以在 EMP 表上對 LOC 列建立索引 。
3、 基于函數的索引( function-based index ) 這些就是 B* 樹索引或位圖索引,它將一個函數計算得到的結果存儲在行的列中,而不是存儲列數據本身。可以把基于函數的索引看作一個虛擬列(或派生列)上的索引,換句話說,這個列并不物理存儲在表中。
基于函數的索引可以用于加快形如 SELECT * FROM T W HERE FUNCTION(DATABASE_COLUMN) = SAME_VALUE 這樣的查詢,因為值 FUNCTION(DATABASE_COLUMN) 已經提前計算并存儲在索引中。4、 應用域索引( application domain index ) 應用域索引是你自己構建和存儲的索引,可能存儲在Oracle 中,也可能在 Oracle 之外。
你要告訴優化器索引的選擇性如何,以及執行的開銷有多大,優化器則會根據你提供的信息來決定是否使用你的索引。 Oracle 文本索引就是應用域索引的一個例子;你也可 以使用構建 Oracle 文本索引所用的工具來建立自己的索引。
需要指出,這里創建的 “ 索引 “ 不需要使用傳統的索引結構。例如, Oracle 文本索引就使用了一組表來實現其索引概念。
5、HASH索引 使用HASH索引必須要使用HASH群集。建立一個群集或HASH群集的同時,也就定義了一個群集鍵。
這個鍵告訴Oracle如何在群集上存儲表。在存儲數據時,所有與這個群集鍵相關的行都被存儲在一個數據庫塊上。
若數據都存儲在同一個數據庫塊上,并且使用了HASH索引,。
轉載請注明出處華閱文章網 » oracle索引語句