sql 資料庫索引的使用規則

2021-09-02 03:21:44 字數 3087 閱讀 3873

[b]1.應該建索引的字段:[/b]

[color=red]a.經常作為查詢條件的字段[/color]

b.外來鍵

c.經常需要排序的字段

d.分組排序的字段。

[b]2.應該少建或者不建索引的字段有:[/b]

[b][color=red]a.表記錄太少[/color][/b]

[color=blue][b]b.經常需要插入,刪除,修改的表[/b][/color]

[b]c.表中資料重複且分布平均的字段[/b]

3.一些sql的寫法會限制索引的使用:

[color=red]a.where子句中如果使用in、or、like、!= <>,均會導致索引不能正常使用,將"<>"換成">and<";將"is not null "換成">=chr(0)";[/color]

[color=blue][b]b.使用函式時,該列就不能使用索引,+號屬於函式所以會停用索引。[/b][/color]

[b]c.比較不匹配資料型別時,該索引將會被忽略。[/b]

停用索引例子:

不使用索引: select account_name from transaction where amount !=0;   

使用索引: select account_name from transaction where amount >0;  

不使用索引: select account_name,amount from transaction

where account_name||account_type='amexa';  

使用索引: select account_name,amount from transaction

where account_name = 『amex' and account_type='a';   

不使用索引: select account_name, amount from transaction

where amount + 3000 >5000;   

使用索引: select account_name, amount from transaction

where amount > 2000 ;

相同的索引列不能互相比較,這將會啟用全表掃瞄

不使用索引: select account_name, amount from transaction

where account_name = nvl(:acc_name,account_name);   

使用索引: select account_name, amount from transaction

where account_name like nvl(:acc_name,'%');   

[size=medium][color=red][b]4.一些sql語句優化的寫法:[/b][/color][/size]

1.如果from是雙表的查詢時,大表放在前面,小表放在後面(基礎表)。最後面的表是基礎表。(只在基於規則的優化器中有效)

2.如果三表查詢時,選擇交叉表(intersection table)作為基礎表.(只在基於規則的優化器中有效)

3.[color=red]寫where條件時,有索引欄位的判斷在前,其它欄位的判斷在後;[/color]如果where條件中用到復合索引,按照索引列在復合索引中出現的順序來依次寫where條件;

4.[color=red]查詢數量較大時,使用表連線代替in,exists,not in,not exists等。[/color]

5.oracle採用自下而上的順序解析where子句,那些可以過濾掉最大數量記錄的條件必須寫在where子句的末尾。

5.某些select 語句中的where子句不使用索引. 這裡有一些例子.

在下面的例子裡, [size=medium][color=red][b]『!=' 將不使用索引. 記住, 索引只能告訴你什麼存在於表中, 而不能告訴你什麼不存在於表中. [/b][/color][/size]

不使用索引:

select account_name

from transaction

where amount !=0;

使用索引:

select account_name

from transaction

where amount >0;

[size=medium][color=blue][b]下面的例子中, 『||'是字元連線函式. 就象其他函式那樣, 停用了索引. [/b][/color][/size]

不使用索引:

select account_name,amount

from transaction

where account_name||account_type='amexa';

使用索引:

select account_name,amount

from transaction

where account_name = 『amex'

and account_type='a';

下面的例子中, 『+'是數學函式. 就象其他數學函式那樣, 停用了索引.

不使用索引:

select account_name, amount

from transaction

where amount + 3000 >5000;

使用索引:

select account_name, amount

from transaction

where amount > 2000 ;

下面的例子中,相同的索引列不能互相比較,這將會啟用全表掃瞄.

不使用索引:

select account_name, amount

from transaction

where account_name = nvl(:acc_name,account_name);

使用索引:

select account_name, amount

from transaction

where account_name like nvl(:acc_name,'%');

sql 資料庫索引的使用規則

b 1.應該建索引的字段 b color red a.經常作為查詢條件的字段 color b.外來鍵 c.經常需要排序的字段 d.分組排序的字段。b 2.應該少建或者不建索引的字段有 b b color red a.表記錄太少 color b color blue b b.經常需要插入,刪除,修改的...

資料庫 sql中索引的使用

建立索引需要使用 create index 語句,該語句允許對索引命名,指定要建立索引的表以及要索引的列,指定索引按照公升序 降序排列。同 unique 約束一樣,索引可以是唯一的。這種情況下,索引會阻止列中 或者列的組合,其中某些列有索引 出現重複的條目。單列索引 create index 索引名...

SQL資料庫索引

索引的用途 通過索引來加快資料處理速度。對資料查詢及處理速度已經成為衡量應用系統的標準。索引的優點 加快訪問速度,加強行的唯一性。索引型別 1.唯一索引 唯一索引不允許兩行具有相同的索引值。2.主鍵索引 為表定義乙個主鍵將自動建立主鍵索引,主鍵索引是唯一索引的特殊型別。主鍵索引要求主鍵中每乙個值是唯...