1. 程式人生 > >oracle 的索引index,檢視view

oracle 的索引index,檢視view

/**********************
面試:如何優化你的資料庫查詢?

1.資料庫的查詢方式?
– 全表掃描:最慢 select * from tb_emp;
– 利用索引掃描:快,推薦使用。也是一張表,只有兩列。key-value
– 共享語句:必須建立在全表掃描的基礎之上,已經查過的資料會保留在快取中,直接去快取中查詢。

索引 index
作用: 在資料庫中用來加速對錶的查詢。
原理: 通過使用快速路徑訪問方法快速定位資料,減少了磁碟的I/O
特點:
與表獨立存放,但不能獨立存在,必須屬於某個表
由資料庫自動維護,表被刪除時,該表上的索引自動被刪除。

索引的建立:
自動: 當在表上定義一個PRIMARY KEY 或者UNIQUE 約束條件時, 資料庫自動建立一個對應的索引.
手動: 使用者可以建立索引以加速查詢.(不能亂指定,最好是經常要查的欄位)

當建立索引的時候,Oracle會預設建立一個和當前表相關的索引頁,
而索引頁中儲存了索引欄位和真實的磁碟地址,
當用戶傳送sql語句帶了索引的時候,Oracle會到索引頁中查詢索引欄位,
直接定位磁碟IO,提取資料。所以索引資料快於全表掃描。

索引的維護
1.建立索引後,查詢的時候需要在 where 條件中帶索引的欄位才可以使用索引。
2.在經常查詢的欄位上面建立索引。不要在所有欄位上面建立索引。
3.因為索引是用來加快查詢速度的,如果一張表經常做insert、delete、update,
而很少做 select,不建議建立索引,因為Oracle需要對索引進行額外的維護
如果一張表字段很少,不建議建立索引。
4.索引是由Oracle自動維護的。索引使用久了會產生索引碎片(磁碟碎片),
影響查詢效果,所以使用久了需要手動進行維護(刪除再重建)。
*/

select * from tb_stu;

insert into tb_stu values (9, ‘Jss’, 1);

– 建立 index
– create index 索引名 on 需要建立索引的表名(當做索引的列名);
create index stu_index on tb_stu(name);
– 在使用的時候,不用理,Oracle 會自動去呼叫索引進行查詢
select * from tb_stu where name = ‘翠花’;

– 刪除索引
drop index stu_index;

/*
sql語句的優化:
多使用共享語句 儘量使你的sql語句能夠使用索引。
怎樣使sql語句能夠使用到索引呢:
當sql語句中包含not in,<>,is null,is not null,like ‘%%’的時候不會用索引。

IN: in 會拆成一堆 or 的,可以使用表的索引。

NOT IN:強列推薦不使用,因為它不能應用表的索引。

<> 操作符(不等於): 不等於操作符是永遠不會用到索引的,因此對它的處理只會產生全表掃描。
優化方案:用其它相同功能的操作運算代替,如a<>0 改為 a>0 or a<0;a<>’’ 改為 a>’’.

IS NULL 或IS NOT NULL操作(判斷欄位是否為空):
判斷欄位是否為空一般是不會應用索引的,
因為 B 樹索引(oracle大多是使用 B 樹索引)是不索引空值的。
優化方案:用其它相同功能的操作運算代替,如 a is not null 改為 a>0 或a>’’等。
is null 時,用一個預設值代替空值,例如業務申請中狀態欄位不允許為空,預設為申請。

LIKE:LIKE操作符可以應用萬用字元查詢,裡面的萬用字元組合可能達到幾乎是任意的查詢,
但是如果用得不好則會產生效能上的問題,

優化方案:如LIKE ‘%001%’ 這種查詢不會引用索引,會產生全表掃描,
而LIKE ‘001%’則會引用範圍索引。進行範圍的查詢,效能肯定大大提高。
*/

create table aaa (
comm int default 0,
status varchar(20) default ‘已發’
);

create table bbb (
email varchar(50) default ‘[email protected]
);

select * from aaa where comm is null; – 不會用到 index
select * from bbb where email = ‘[email protected]’; – 會用到 index

– 建立使用者時通過 dba 角色賦予許可權,而不是手動賦予許可權,則建立檢視會報:沒有許可權
– 解決方案:使用 system 使用者登入,再給 java9 賦予許可權
grant create any table to jss with admin option;
grant create any view to jss with admin option;
grant select any table to jss with admin option;

– 資料字典都是檢視
– 資料字典,其實就是 Oracle 自帶的一些路七八糟的資料表
select * from User_tables;
select * from scott.emp;

– 同義字可以理解為表的別名,檢視可以理解成 sql 語句的別名
–檢視可以使複雜的查詢變得簡單
select deptno, sum(sal), max(sal), min(sal), count(*), avg(sal)
from scott.emp
group by deptno;

–建立簡單檢視(一個表)
create view aaaa
as
select deptno 部門, sum(sal) 總薪資, max(sal) 最大值, min(sal) 最小值, count(*) 總數, avg(sal) 平均數
from scott.emp
group by deptno;

–使用檢視
select * from aaaa;
select * from bbbb;

–複雜檢視(多個表)
create view bbbb
as
select d.dname 部門, d.loc 地址, e.*
from scott.dept d, scott.emp e
where d.deptno = e.deptno

–刪除檢視

–注意:可以通過檢視操作表,但是不建議

相關推薦

oracle索引index檢視view

/********************** 面試:如何優化你的資料庫查詢? 1.資料庫的查詢方式? – 全表掃描:最慢 select * from tb_emp; – 利用索引掃描:快,推薦使用。也是一張表,只有兩列。key-valu

ORACLE索引失效更新統計信息

exec use cascade not null dna oracl HERE ima gree 有時候建立索引的時候不走索引,排除了字段數據問題和sql寫法問題之外,應該是統計信息有問題,得重新收集。 一:解鎖統計信息 為了穩定執行計劃,一般統計信息都會被鎖住的,在更新

Oracle索引(Index)建立使用

Oracle物件教程:索引(Index)建立使用,索引:對資料庫表中的某些列進行排序,便於提高查詢效率。 當我們在某本書中查詢特定的章節內容時,可以先從書的目錄著手,找到該章節所在的頁碼,然後快速的定位到該頁。這種做法的前提是頁面編號是有序的。如果頁碼無序,就只能從第一

檢視(VIEW)、索引(INDEX)

1、檢視:表的一部分投影,也是資料庫中一個物件。(表的虛擬部分)      作用:因為檢視中含有某表中的部分資料,不在檢視中的欄位有隱藏效果。相對來說,較安全。      特點:檢視可以像表一樣進行增刪改查。      建立檢視:create view viewName

Oracle,create index,如果是大表建立索引切記加上online引數

轉載:http://blog.csdn.net/robinjwong/article/details/42104831 這幾天在做資料庫的優化,有個2億記錄的表,發現需要新增一個聯合索引,結果就採用普通的create index index_name on table

Oracle中發生表加鎖、死鎖的原因檢視與解決方法

一.表加鎖、死鎖出現的現象 1.對資料庫操作update,insert,delete時候,資料庫無法更新,操作等待時長,操作結果不發生改變 2.在程式中,底層(資料訪問層)操作時候,不成功,資料庫連線超時,無法操作,或者操作等待時長等現象 【加鎖的原理】:比如一個操作在進行修改一表,它

檢視Oracle的連線以及對會話操作

  #檢視當前不為空的連線select * from v$session where username is not null   #檢視不同使用者的連線數 select username,count(username) from v$session where username

Mysql05隔離級別檢視索引事務左右連線

Mysql資料庫day05   行內檢視子查詢 l  子查詢在from後面 l  從一個查詢的查詢結果,再查詢   select … from (select …) t  

oracle索引分析索引索引碎片整理

41.oracle索引,分析索引,索引碎片整理 概述 索引分為B樹索引和點陣圖索引。我們主要研究B樹索引,B樹索引如下圖(圖片源自網路):   索引是與表相關的一個可選結構,在邏輯上和物理上都獨立於表資料,索引能優化查詢,不能優化DM

3D空間中的視野世界檢視投影,World,View,Projection的作用和區別

D3D11_VIEWPORT vp; vp.Width = (FLOAT)m_bufferWidth; vp.Height = (FLOAT)m_bufferHeight; vp.MinDepth = 0.0f; vp.MaxDepth = 1.0f; vp.TopLeftX = 0; vp

如何修改帶索引的欄位的長度檢視、刪除索引修改欄位屬性、建立索引

需要重新建立索引,因為長度不同會認為是兩個不同的所索引。 建立和刪除索引 索引的建立可以在CREATE TABLE語句中進行,也可以單獨用CREATE INDEX或ALTER TABLE來給表增加索引。刪除索引可以利用ALTER TABLE或DROP INDEX語句來實現。 (1)使用ALTER T

Atitit lucence 使用總結 目錄 1. 基本概念 1 1.1. Index:索引文件的集合組成索引。 1 2. 建立索引 2 2.1. Api查詢 2 2.2. Dsl查詢 3

Atitit lucence 使用總結   目錄 1. 基本概念 1 1.1.   Index:索引庫,文件的集合組成索引。 1 2. 建立索引 2 2.1. Api查詢 2 2.2. Dsl查詢 3     Merge

事務檢視索引備份和恢復

什麼是事務 事務(TRANSACTION)是作為單個邏輯工作單元執行的一系列操作 多個操作作為一個整體向系統提交,要麼都執行、要麼都不執行  事務是一個不可分割的工作邏輯單元  轉賬過程就是一個整體 它需要兩條UPDATE語句來完成,這兩條語句是一個整體 如果其中任一條出現

查殺oracle正在執行的job解決job broken後view job時total time還在增長

1.首先確定要停止的JOB號 select * from dba_jobs_running;--得到sid和job號 2.Broken你確認的JOB 可以在PL/SQL Developer中,直接選項broken;或者使用語句: EXEC DBMS_JOB.BROKEN(job#,T

Oracle總結 05》--檢視、序列、索引及約束等用法

1:建立一個檢視,包含20號部門的員工資訊,欄位:empno,ename,sal,job,deptno CREATE VIEW v_emp007_20  AS    SELECT empno,ename,sal,job,deptno FROM emp_xiangyoul

SQL語句優化索引檢視觸發器儲存過程函式等。

    一,SQL優化        主要解決海量資料操作時的全表搜尋,所以減少不必要的全表搜尋是SQL優化的主要目的,下面總結一下常用的優化有哪些:        1,避免在where條件中使用!=或者<>,這樣會是的查詢放棄索引而進行全域性掃描       

Android PagerAdapter 不重新整理、未重新整理索引超出、檢視重疊問題解決

1、第一個問題,一開始呼叫 notifyDataSetChanged 檢視沒有重新整理, 查資料說是要重寫 getItemPosition return POSITION_NONE。 2、第二個問題 destroyItem 方法銷燬時候的程式碼一開始寫成 View vi

Oracle檢視(View)建立使用

Oracle物件教程:檢視(View)建立使用,檢視(View)實際上是一張或者多張表上的預定義查詢,這些表稱為基表。從檢視中查詢資訊與從表中查詢資訊的方法完全相同。只需要簡單的SELECT…FROM即可。 檢視具有以下優點: 1. 可以限制使用者只能通過檢視檢索資料。這

ORACLE如何使用DBMS_METADATA.GET_DDL獲取表表空間使用者檢視等的DDL語句

1.顯示設定: /*建立DBMS_METADATA: @?/rdbms/admin/catmeta.sql */ SETSERVEROUTPUTON SETLINESIZE1000 SETFEEDBACKOFF setlong999999 S

Oracle建立檢視(View)

檢視:是基於一個表或多個表或檢視的邏輯表,本身不包含資料,通過它可以對錶裡面的資料進行查詢和修改。檢視基於的表稱為基表,Oracle的資料庫物件分為五種:表,檢視,序列,索引和同義詞。 檢視是儲存在資料字典裡的一條select語句。通過建立檢視可以提取資料的邏輯上的集合或組合。   檢視的優點