Orcale 效能優化之索引使用

2021-07-02 07:35:33 字數 3314 閱讀 7100

1.

索引必須合理建立,過多的建立索引會增加增刪改的負擔。

2.有空值的字段盡量不要建索引。 3.

盡可能建立唯一的索引。 4.

常用的字段組合可以建立復合索引。 5.

不要在索引列使用以下操作,否則索引會失效。 a

.not

、<>

b. is null ,isnot null

c.like

,like

比較特殊,當使用

like '%xx%'

時,索引會失效;左模糊和右模糊索引都可以用,當然,右模糊時需要建立對應的倒索引。

比如:zte_fbp_employees_n3是表ztenet.zte_fbp_employees

的在employee_number列上的索引

———————————不走n3

索引————————————————————

not:

selectt.employee_id

from ztenet.zte_fbp_employees t

where t.employee_number

not  in(

'000');

is not null:

selectt.employee_id

from ztenet.zte_fbp_employees t

where t.employee_number

is not null;

is null:

selectt.employee_id

from ztenet.zte_fbp_employees t

where t.employee_number

is null;

like:

selectt.employee_id

from ztenet.zte_fbp_employees t

where t.employee_number

like '%001%';

selectt.employee_id

from ztenet.zte_fbp_employees t

where t.employee_number

like '%001';

——————————走n3

索引————————————————————

is not null:

selectt.employee_id

from ztenet.zte_fbp_employees t

where t.employee_number>'';

like:

selectt.employee_id

from ztenet.zte_fbp_employees t

where t.employee_numberlike '001%';

//建立乙個反的索引

,然後左

like

create

index user_info_idx on user_info(upper(reverse(full_id)));

selectt.employee_id

from ztenet.zte_fbp_employees t

where t.employee_number

like '%001'; 6.

不要在索引列執行計算、型別轉換,否則索引會失效,反之,有時我們會故意讓索引失效,這時我們就可以通過在索引列計算、型別轉換等等方式來實現。

比如:bill_code是表zte_ets_air_bills的索引

——————————不走n1

索引———————————————————— //

通過計算,取消不需要的索引

select*

from zte_ets_air_bills t

where t.bill_code

||''

= '000'

and t.bill_id = 1

//轉換讓其不走索引

select*

from zte_ets_air_bills t

where

nvl(

t.bill_code

,'n')

= '000'

and t.bill_id = 1

注意:列和對應值的型別一定要寫對,否則可能導致不走索引

此時走的是列名determiner 的索引

n2,因為n2是

varchar

select*

from ztefbp.zte_fbp_pos_stru_elements el

where 1 = 1

and el.determiner = '0'

and el.pos_structure_id = 10001

若寫成如下,則不會走索引

n2了,因為

demerminer

=0這句預設轉換成了

to_number(

demerminer

)=0,

索引失效了。

select*

from ztefbp.zte_fbp_pos_stru_elements el

where 1 = 1

and el.determiner = 0

and el.pos_structure_id = 10001

7.如果是組合索引,條件只用到乙個列,這時可以把另外乙個列用於乙個客觀條件,

比如:zte_fbp_employees_n1是由dept_id和employee_number組成的索引

——————————不走n1

索引————————————————————

selectt.employee_id

from ztenet.zte_fbp_employees t

where t.employee_number = '000'

——————————走

n1索引—————————————————————————

selectt.employee_id

from ztenet.zte_fbp_employees t

where t.employee_number = '000'

and 

t.dept_id

>=0

8.不是走索引就一定快,優化時根據實際情況來進行選擇。

效能優化之mysql索引優化

sql及索引優化 如何通過慢查詢日誌發現有問題的sql?查詢次數多且每次查詢占用時間長的sql 通常為pt query digest分析的前幾個查詢 io大的sql 注意pt query digest分析中的rows examine項 未命中索引的sql 注意pt query digest分析中ro...

SQL優化之索引使用

最近找工作,遇到乙個面試題 sql哪些關鍵字會忽略索引?因為之前沒這方面的經驗,當時懵逼了,隨便扯了一點。最終有沒能通過面試很遺憾。我們都知道對查詢進行優化,應盡量避免全表掃瞄,多使用索引,首先應考慮在 where 及 order by 涉及的列上建立索引。不過應該注意兩點 1 並不是所有索引對查詢...

MySQL 資料庫效能優化之索引優化

資料庫效能優化專題 系列的第三篇文章 mysql 資料庫效能優化之索引優化 大家都知道索引對於資料訪問的效能有非常關鍵的作用,都知道索引可以提高資料訪問效率。為什麼索引能提高資料訪問效能?他會不會有 是不是索引建立越多,效能就越好?到底該如何設計索引,才能最大限度的發揮其效能?這篇文章主要是帶著上面...