資料庫表中的索引可以加快查詢的速度。索引是資料庫表字段的有序副本。附加的字段包含指向真實資料庫錶行的指標。排序可以使訪問錶行的速度變快,例如,可以使用二分搜尋。資料庫表至少有乙個主索引,由它的key欄位定義。它也可以有一到多個二級索引。
英文原文:
主索引是由主鍵的key欄位構造的唯一索引,as abap總會自動建立它。對於每個索引欄位的組合,表中最多只能有一條記錄。 如果無法使用主索引識別記錄集,比如說,沒有使用主索引查詢字段,就會發生全表掃瞄,可能導致查詢效能不佳,或者資料庫系統會嘗試使用合適的二級索引(如果有的話)。
除了由主鍵定義的主索引,也可以為資料庫表定義唯一或不唯一的二級索引。建立二級索引通常會提高資料庫的讀效能,前提是讀取的時候使用到了二級索引。
二級索引包含一系列資料庫表字段,有乙個最大3位長度的文字數字組成的id。0是乙個保留id,用來表示主索引。string和rawstring型別的字段無法成為索引字段(全文索引除外)。也不建議使用資料型別fltp的字段作為索引字段。
資料庫表在資料庫中被建立的時候,二級索引也會被定義。此外,可以晚些在相同的系統中建立新的二級索引。如果如果在其他系統增加新的二級索引而不作修改的話,它們會被建立為擴充套件索引。以下是建議的索引的命名空間:
資料庫中的索引名字通常是dbtab~id,dbtab是資料庫表的名字,id是3位字元的id。也可能有其它名字,比如空格或下劃線。
二級索引可以是唯一的,但是(不像主索引)沒必要。對唯一索引而言,資料庫表不能含有同樣索引值的多行資料。試圖插入重複的行,會取消資料庫操作,並在abap中觸發相應的異常。在指定了client的表中,唯一索引必須包含client欄位。
訪問資料庫時,資料庫系統的優化器會檢查是否有合適的索引,並使用它。索引的選擇取決於平台,意味著可以在abap字典中定義非唯一索引在不同的資料庫系統中是否可用。有幾種選項,
這些選項對錶快取的二級索引無效。如果表快取有相關設定,那麼系統就會根據表快取的設定決定是否使用二級索引。
唯一二級索引總是會被建立,而且無法從資料庫刪除。可以使用事務**st05中的sql跟蹤功能來判斷訪問資料時系統使用的索引。
索引對於查詢資料的提公升效果取決於索引代表結果資料集的能力。只有索引中可以對結果集進行有效約束的字段才是有用的。這種情況下,索引中的字段順序是乙個對於資料的訪問速度十分重要的因素。第乙個字段必須是那些有著大量不同可選值的字段。在查詢中,要在查詢條件中指定索引的第乙個字段,這樣索引才有用。另外,只有乙個索引字段前面的全部索引欄位都在查詢條件內時,這個索引欄位才生效。欄位的訪問速度和索引是否為唯一索引無關。
對於以下情況,建立二級索引可以帶來好處:
注:選擇性(selectivity),是指不重複的索引值(也叫基數,cardinality)與表記錄數(#t)的比值, index selectivity = cardinality / #t
二級索引也會增加系統負載,因為每次表內容被修改時,二級索引都要做相應調整。表的每個額外的索引都會降低插入行的效能。如果需要頻繁在表中插入資料,那麼應該只建立很少的索引。太多索引也會導致資料庫的優化器找不到正確的索引。為了避免這點,表中的索引最好不相交(沒有相同的字段)。
索引應該只包含幾個字段,比如,原則上不超過4個。這是因為索引欄位在被更新的時候,索引也要被更新。適合作為索引的字段是:
不應該為乙個表建立超過5個索引,因為,
索引只支援明確的條件值,比如=或者like。如果條件中包含某些不確定因素,比如<>,那麼索引將無法改善效能。條件中包含or時,優化器通常停止工作。換句話說,使用索引時,or條件的字段是不生效的。乙個例外是or關係互相獨立。因此,對於包含or和索引字段結合的條件,有時需要修改條件的形式。(可以看下面的例子)
下面這個句子會導致優化器無法使用索引,因為遇到了or:
select * fromspfli
where carrid = 'lh'
and( cityfrom = '
frankfurt
'or cityfrom = '
new york
' ).
替換成下面這樣的乙個相等的句子,可以根據現有索引對整個條件進行優化(原因見前文):
select *from
spfli
where ( carrid = 'lh'
and cityfrom = '
frankfurt
' ) or
( carrid = 'lh'
and cityfrom = '
new york
' ).
sap hana資料庫支援全文索引,全文索引可以作為二級索引。全文索引會在資料庫中被建立為乙個額外的可見的列。全文索引的列的內容會被儲存在這個額外的列中,以某種格式儲存,在相關資料被訪問的時候會發揮作用。
以下是全文索引的使用條件:
全文索引總是非唯一索引。使用全文索引的訪問基於資料庫中的where contains元素。目前這個元素在abap sql中還不可用,需要使用native sql或者amdp。
更多有關全文索引的資訊,參看:sap hana developer guide.
資料庫中的索引
1.概念 索引是在資料庫表或者檢視上建立的物件,目的是為了加快對錶或檢視的查詢的速度 簡單理解 索引是乙個單獨的 物理的資料庫結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的資料頁的邏輯指標清單 深刻理解 按照儲存方式分為 聚集與非聚集索引 需要重視和區別的概念,後面詳解 按照...
資料庫中的索引
總結 1.什麼是索引 資料庫中的索引是某個表中一列或多列值的集合和相應的指向表中物理標識這些值的資料頁的邏輯指標清單。2.分類 唯一索引 unique 不允許兩行具有相同的索引值 建立了唯一約束,系統將自動建立唯一索引 主鍵索引 主鍵索引要求主鍵中的每個值是唯一的,建立主鍵自動建立主鍵索引 聚集索引...
資料庫中的索引
索引 與表相關的一種選擇結構,可建立在表中的一列或多列上,一旦建立,由資料庫自動維護和使用,對使用者是完全透明的。它的建立或刪除對錶沒有任何影響。注意 1.索引是一種資料庫物件,並不改變表的邏輯結構,而是在物理儲存結構上增加一些輔助資訊,以提高查詢速度。2.只有當按指定的索引列的值查詢或按索引列的順...