Oracle 建立索引及SQL優化

2021-08-13 19:29:44 字數 1882 閱讀 7282

oracle 建立索引及sql優化

資料庫索引:

索引有單列索引

復合索引之說

如何某錶的某個欄位有主鍵約束和唯一性約束,則oracle 則會自動在相應的約束列上建議唯一索引。資料庫索引主要進行提高訪問速度。

建設原則:

1、索引應該經常建在where 子句經常用到的列上。如果某個大表經常使用某個字段進行查詢,並且檢索行數小於總表行數的5%。則應該考慮。

2、對於兩表連線的字段,應該建立索引。如果經常在某錶的乙個字段進行order by 則也經過進行索引。

3、不應該在小表上建設索引。

優缺點:

1、索引主要進行提高資料的查詢速度。 當進行dml時,會更新索引。因此索引越多,則dml越慢,其需要維護索引。 因此在建立索引及dml需要權衡。

建立索引:

單一索引:create

index

on(column_name);

復合索引: create

index i_deptno_job on emp(deptno,job); —>在emp表的deptno、job列建立索引。

select * from emp where deptno=66

and job='sals' ->走索引。

select * from emp where deptno=66

or job='sals' ->將進行全表掃瞄。不走索引

select * from emp where deptno=66 ->走索引。

select * from emp where job='sals' ->進行全表掃瞄、不走索引。

如果在where 子句中有or 操作符或單獨引用job 列(索引列的後面列) 則將不會走索引,將會進行全表掃瞄。

sql 優化: 當oracle資料庫拿到sql語句時,其會根據查詢優化器分析該語句,並根據分析結果生成查詢執行計畫。

也就是說,資料庫是執行的查詢計畫,而不是sql語句。 查詢優化器有rule-based-optimizer(基於規則的查詢優化器)

和cost-based-optimizer(基於成本的查詢優化器)。 其中基於規則的查詢優化器在10g版本中消失。

對於規則查詢,其最後查詢的是全表掃瞄。而cbo則會根據統計資訊進行最後的選擇。

select loc_id , loc_desc , region   from location     where loc_id = 10

union

select loc_id , loc_desc , region   from location   where region = 「melbourne」

低效:

select loc_id , loc_desc , region   from location   where loc_id = 10

or region = 「melbourne」

如果你堅持要用or, 那就需要返回記錄最少的索引列寫在最前面.

select * from emp (基礎表) where empno > 0

andexists (select 『x』 from dept where dept.deptno = emp.deptno and loc = 『melb』)

低效:

select * from emp (基礎表) where empno > 0

and deptno in(select deptno from dept where loc = 『melb』)

Oracle 建立索引及SQL優化

資料庫索引 索引有單列索引 復合索引之說 如何某錶的某個欄位有主鍵約束和唯一性約束,則oracle 則會自動在相應的約束列上建議唯一索引。資料庫索引主要進行提高訪問速度。建設原則 1 索引應該經常建在where 子句經常用到的列上。如果某個大表經常使用某個字段進行查詢,並且檢索行數小於總表行數的5 ...

Oracle 索引建立及管理

oracle索引建立及管理 1.oracle 索引簡介 在 oracle 資料庫中,儲存的每一行資料都有乙個 rowid 來標識。當 oracle 中儲存著大量的資料時,意味著有大量的 rowid,此時想要快速定位指定的 rowid 就需要使用索引物件。當對 oracle 表執行指定條件的查詢時,常...

SQL調優(索引)

索引 主鍵索引,唯一索引,組合索引,全文索引等 sql優化步驟 首先定位慢查詢 mqsql預設是響應超過十秒鐘的才是慢查詢 定位到了慢查詢才根據語句看採用什麼調優方式 索引的實現原理其實就是二叉樹 b 樹 主鍵索引 當我們在習慣性的生成primiry key的時候,就是生成了主鍵索引,採用二叉樹的形...