oracle如何根據索引名和表名找到該索引包含的所有字段,有通用SQL語句嗎啊

時間 2022-04-14 07:51:41

1樓:匿名使用者

根據索引找到該索引的所有字段

假如有 a 表

有 id,c1,c2,c3 4個字段。

id上建有索引。

那麼對於索引的儲存結構來說, 包含2個部分,乙個是索引包含的資料,也就是 id 的數字,乙個是 索引所在行的 實體地址 (rowid)

當 select * from a where id = 1 的時候。

首先通過索引,檢索到 行的實體地址,

然後通過行的實體地址,讀取到 c1,c2,c3的資料。

假如sql是 select count(1) from a where id = 1 的時候。

資料庫在讀取完索引以後, 發現不需要讀取物理行的資訊( 因為 select 裡面,沒有其他字段), 那麼就直接返回了。

oracle資料庫中如何檢視已經建立的索引資訊?

2樓:

可以檢視資料字典 dba_indexes all_indexes user_indexes 來檢視索引這三個字典都可以查到執行查詢的當前使用者的索引資訊,不同的是查詢範圍依次減少 user_indexes 只能看到當前使用者的索引物件,還可以結合dba_ind_columns(all_\user_)檢視來檢視更詳細的資訊

3樓:

你也可以檢視em,在administration中schema物件中database objects下有個indexes,裡面是各使用者表的索引資訊,很全很清晰的。

4樓:匿名使用者

select index_name from user_indexes where table_name='student';

注意表名要大寫

5樓:匿名使用者

如果不太熟悉oracle,建議使用工具軟體,如pl/sql developer,連線以後,選擇檢視索引物件。

6樓:匿名使用者

select * from all_objects where object_type='index' and owner='scott';

orselect * from all_indexes;

oracle建立索引sql簡單的例子,在表中的指定欄位和如何使用索引呢?

7樓:龍佐天下

建立索引:create index emp_id1(索引名) on emp(empno,ename,deptno) ;

在建立索引時需要制定所在的表的列名,即你要在哪個或者哪些列上建立索引!

使用索引:索引一般是在查詢時由資料庫優化器自動進行判斷是否使用,就是說就算你在某個列上建立了索引,當你在查詢這個表時資料庫也不一定會使用索引,因為有時候需要查詢的範圍比較大,如全表查詢,這時資料庫優化器會去判斷使用索引和不使用索引哪個效率高,當然是不使用索引效率高啦!所以說一般查詢時是不要指定索引的,不過索引還是得建立的!

雖說查詢時不推薦指定索引,但還是可以指定的:select * from stumarks (index=ix_writtenexam) where writtenexam between 60 and 9

8樓:請叫我召哥

create index index_name on table_name(column_name) ;

只要你查詢使用到建了索引的字段,一般都會用到索引。

--建立表

create table aaa

(a number,

b number

);--建立索引

create index idx_a on aaa (a);

--使用索引

select * from aaa where a=1;

這句查詢就會使用索引 idx_a

oracle中表建立聯合索引後,其中的乙個字段是否可以用來進行索引。

9樓:我tm不管

1、表的主鍵、外來鍵必須有索引;

2、資料量超過300的表應該有索引;

3、經常與其他表進行連線的表,在連線欄位上應該建立索引;

4、經常出現在where子句中的字段,特別是大表的字段,應該建立索引;

5、索引應該建在選擇性高的字段上;

6、索引應該建在小字段上,對於大的文字字段甚至超長字段,不要建索引;

7、復合索引的建立需要進行仔細分析;盡量考慮用單字段索引代替:

a、正確選擇復合索引中的主列字段,一般是選擇性較好的字段;

b、復合索引的幾個字段是否經常同時以and方式出現在where子句中?單字段查詢是否極少甚至沒有?如果是,則可以建立復合索引;否則考慮單字段索引;

c、如果復合索引中包含的字段經常單獨出現在where子句中,則分解為多個單字段索引;

d、如果復合索引所包含的字段超過3個,那麼仔細考慮其必要性,考慮減少復合的字段;

e、如果既有單字段索引,又有這幾個欄位上的復合索引,一般可以刪除復合索引;

8、頻繁進行資料操作的表,不要建立太多的索引;

9、刪除無用的索引,避免對執行計畫造成負面影響;

以上是一些普遍的建立索引時的判斷依據。一言以蔽之,索引的建立必須慎重,對每個索引的必要性都應該經過仔細分析,要有建立的依據。因為太多的索引與不充分、不正確的索引對效能都毫無益處:

在表上建立的每個索引都會增加儲存開銷,索引對於插入、刪除、更新操作也會增加處理上的開銷。另外,過多的復合索引,在有單字段索引的情況下,一般都是沒有存在價值的;相反,還會降低資料增加刪除時的效能,特別是對頻繁更新的表來說,負面影響更大。

看看這個你就明白了

10樓:匿名使用者

如果是建立了聯合索引,只有在兩個條件都給定的時候這個聯合索引才起作用,比如where id=? and user_id=?,如果只給where id=?

或者是where user_id=? 這樣的查詢聯合索引不起作用。怎麼建需要看平時用哪種條件查詢的比較多,適當建立

11樓:

乙個where id=? 另外乙個 where id=? and user_id=?

那麼這種情況下建立復合索引test_table(id,user_id)效率比較高(復合索引只訪問一次,而單獨建兩個索引需要訪問索引兩次)還節省了儲存資源,一般來說 復合索引使用的條件是where後面的列名順序和索引建立時的順序要一致,如果where後面有id的話 也可以用到這個復合索引,如果只是user_id而沒有id的話是用不上這個復合索引的。 你可以查詢執行計畫或者做乙個sql trace來檢視復合索引和單獨索引的效率情況,比如pl/sq/ dev f5或者sqlplus 下set autot on 然後執行語句 或者

sql>explain plan select * from test_table where id=? and user_id=?

sql>select * from table(dbms_xplan.display);

12樓:匿名使用者

create index table_id_userid on test_table(id,user_id)

where id=? and user_id=? --->okwhere id=? --->ok

where user_id=? --->ng

請問oracle資料庫中 怎麼查詢假設a使用者下的所有表表名及表中的索引名稱及索引欄位呢? 10

如何在oracle中查詢所有使用者表的表名、主鍵名稱、索引、外來鍵等

如何查詢oracle資料庫中已經建立的索引

13樓:三井獸

根據表名,查詢一張表的索引:

select * from user_indexes where table_name=upper('表名')。

根據索引號,查詢表索引字段:

select * from user_ind_columns where index_name=('索引名')。

根據索引名,查詢建立索引的語句:

select dbms_metadata.get_ddl('index','索引名', ['使用者名稱']) from dual ; --['使用者名稱']可省,預設為登入使用者。

oracle資料庫產品為財富排行榜上的前1000家公司所採用,許多大型**也選用了oracle系統。

甲骨文股份****(oracle)是全球大型資料庫軟體公司,總部位於美國加州紅木城的紅木岸。在2008年,甲骨文股份****是繼microsoft及ibm後,全球收入第三多的軟體公司。

如何查詢oracle中存在全表掃瞄的sql語句

oracle索引存在則刪除,oracle索引問題,刪除再重建索引與索引分析

oracle sqlplus 如下 set serverout on declare cnt number 10 0 begin select count into cnt from all indexes where index name test index and table name sys...

ORACLE中,如何根據已知的主鍵查詢所有引用這個主鍵的外來鍵的表

select a.table name,a.column namefrom user cons columns a,user constraints b where a.constraint name b.constraint name and b.constraint type r anda.co...

在oracle表中如何根據外來鍵找到另一張擁有這個外

select from user constraints cc where cc.r constraint name in select c.r constraint namefrom user constraints cwhere c.constraint type r and c.constra...

oracle根據當前年份獲取前後5年的資料集

select to number to char sysdate,yyyy 5 rownum as xx from dual connect by rownum 5 order by xx desc 沒有特別好的辦法 select extract year from sysdate from dua...

oracle中多表連線如何用,oracle 對於多個大表關聯操作如何優化速度?

以兩表為例 有以下兩張表 現在要通過deptno欄位,在查詢中顯示emp表中全部內容和dept表中的dname欄位。可用如下語句 select a.b.dname from emp a,dept b where a.deptno b.deptno 查詢結果 左連線通用寫法 select from a...