[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.主鍵索引 為表定義乙個主鍵將自動建立主鍵索引,主鍵索引是唯一索引的特殊型別。主鍵索引要求主鍵中每乙個值是唯...