達夢索引管理,全部參照官方文件。
索引是與表相關的可選的結構(聚簇索引除外),它能使對應於表的sql語句執行的更快。dm提供了幾種型別的索引。聚集索引:每乙個普通表有且僅有乙個聚集索引;唯一索引:索引資料根據索引鍵唯一;函式索引:包含函式/表示式的預先計算的值;位圖索引:對低基數的列建立位圖索引;位圖連線索引:針對兩個或多個表連線的點陣圖索引,主要用於資料倉儲中(如:create bitmap index idx on test1(test2.id) from test1,test2 where test1.id = test2.id; 沒有用過,不清楚是個什麼功能);全文索引:在表的文字列上建立的索引;
索引在邏輯上和物理上都與相關的表的資料無關,作為無關的結構,索引需要儲存空間。建立或刪除乙個索引時,不會影響基表、資料庫應用或其它索引;當插入、更改和刪除相關的表的行時,dm會自動管理索引。
一般情況下,在插入或裝載了資料後,為表建立索引會更加有效率,若在裝在資料之前建立了乙個或多個索引,那麼在插入每行時,dm都必須更改和維護每個索引,使得插入效率降低。
使用下列準則來決定何時建立索引:若需要經常檢索大表中的少量的行,就為查詢鍵建立索引;為改善多個表的連線的效能,可以為連線列建立索引;主鍵和唯一鍵自動具有索引,在外鍵上很多情況下也建立索引;小表不需要索引。
選取表中的索引列時可以考慮以下幾點:列中的值相對比較唯一;取值範圍大,適合建立索引;clob和text只能建立全文索引,blob不能建立任何索引。
在create index語句中列的排序會影響查詢的效能,通常將最常用的列放在最前面;若查詢中有多個字段組合定位,則不應為每個字段單獨建立索引,而應該建立乙個組合索引;當兩個或多個欄位都是等值查詢時,組合索引中各個列的前後關係是無關緊要的,但若是非等值查詢時,要想有效利用組合索引,則應該按等值欄位在前,非等值欄位在後的原則,查詢時只能利用乙個非等值的字段;
乙個表上可以有任意數量的索引,但是,索引越多,修改表資料的開銷就越大。
建立聚集索引:create cluster index...; 新建聚集索引會重建這個表以及其所有索引,包括二級索引、函式索引,是乙個代價非常大的操作,因此最好在建表時就確定聚集索引鍵,或在表中資料比較少時新建聚集索引。
建立聚集索引的約束條件:每張表中只允許有乙個聚集索引,若之前已經指定了cluster index或cluster pk,則使用者新建立cluster index時系統會自動刪除原先的聚集索引,但若新建聚集索引時指定的建立方式(列、順序)和之前的聚集索引一樣,則會報錯;指定cluster index操作需要重建表上的所有索引,包括pk索引;刪除聚集索引時,預設以rowid排序,自動重建所有索引;若聚集索引是預設的rowid索引,則不允許刪除;聚集索引不能應用到函式索引中;不能在列存表上建立/刪除聚集索引;建聚集索引語句不能含有partition_clause子句;在臨時表上增刪索引會導致當前會話上臨時b樹資料丟失。
建立唯一索引:create unique index...; 另外dm通過在唯一鍵或主鍵上建立乙個唯一索引來在該錶上實施unique key或primary key完整性約束。如:alter table test add constraint con_pk primary key (id); alter table test add constraint con_uni unique (id);
建立函式索引有以下約束條件:函式索引表示式可以由多列組成,不同的列不能超過63個;函式索引表示式裡面不允許出現大字段和時間間隔型別列;不支援建立分割槽函式索引;函式索引表示式的長度理論值不能超過816個字元(包括生成後的指令和字串);函式索引不能為cluster或primary key型別;表示式不支援基函式和不確定函式;快速裝載不支援含有函式索引的表;當表中含有行前觸發器並且該觸發器會修改函式索引涉及的列的值時,不能建立函式索引;若函式索引中要使用使用者自定義的函式,則函式必須是指定了deterministic屬性的確定性函式;若函式索引中使用的確定性函式發生了變更或刪除,使用者需手動重建函式索引;若函式索引中使用的確定性函式內有不確定因素,會導致前後計算結果不同的情況。
位圖索引主要針對含有大量相同值的列而建立,且執行查詢語句的where子句中帶有and和or謂詞時,效果更明顯。語法:create bitmap index...; 位圖索引具有以下約束:支援普通表、堆表和水平分割槽表建立位圖索引;不支援對大字段建立位圖索引;不支援對計算表示式列建立位圖索引;不支援在unique和primary key上建立位圖索引;不支援對存在cluster key的表建立位圖索引;僅支援單列或者不超過63個組合列上建立位圖索引;mpp環境下不支援建立位圖索引;不支援快速裝載含有位圖索引的表;不支援全域性位圖索引;包含位圖索引的表不支援併發的插入、刪除和更新操作。
位圖連線索引區別於位圖索引,是針對兩個或者多個表的連線而建立的點陣圖索引,同時儲存了連線的點陣圖結果。對於索引列中的每乙個值,位圖連線索引在索引表中儲存了對應行的rowid。
當乙個表經過大量的增刪改操作後,表的資料在物理檔案中可能存在大量的碎片,從而影響訪問速度。另外當刪除表的大量資料後,若不再對錶執行插入操作,索引所處的段可能占用了大量並不使用的簇,從而浪費了儲存空間。可以使用重建索引來對索引的資料進行重組,使資料更加緊湊,並釋放不需要的空間,從而提高訪問效率和空間利用率,語法為:sp_rebuild_index(『sch_name』,索引id); 水平分割槽子表、臨時表和系統表上的索引不支援重建;虛索引(只查到了oracle虛擬索引怎麼建立,dm中怎麼建立虛索引還不清楚)和聚集索引不支援重建。
索引刪除之後,該索引的段的所有簇都返回給包含它的表空間,並可用於表空間中的其他物件。如何刪除索引,取決於是否是用create index語句明確的建立該索引的,是則可以使用drop index語句刪除;然而不能直接刪除與已啟用的unique key或primary key鍵約束相關的索引,要刪除乙個與約束相關的索引,必須停用或刪除該約束本身,如:alter table test drop constraint pk_test; 除了刪除普通索引,dm還提供刪除聚集索引,只要其聚集索引是通過create cluster index明確建立的。刪除聚集索引其實是使用rowid作為索引列重建聚集索引,和新建聚集索引一樣會重建這個表及其所有索引列;刪除表就自動刪除了所有與其相關的索引。
建立索引後,可以通過indexdef系統函式檢視索引的定義:select indexdef(索引id,preflag int);其中preflag表示返回資訊中是否增加模式名字首,為1表示加,為0不加。
達夢索引測試
達夢索引測試 索引是對資料庫表中一列或多列的值進行排序的一種結構,使用索引可減少io,快速訪問資料庫表中的特定資訊。索引需要額外的磁碟空間,並降低寫操作的效能。在修改表內容的時候,索引會進行更新甚至重構,索引列越多,這個時間就會越長。所以只保持需要的索引有利於查詢即可。建設原則 1索引應該經常建在w...
達夢資料庫的索引管理
在關聯式資料庫中,索引是一種單獨的 物理的對資料庫表中一列或多列的值進行排序的一種儲存結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的資料頁的邏輯指標清單。達夢支援的索引 二級索引,位圖索引,唯一索引,復合索引,函式索引,分割槽索引等。一 建立索引的規則 適合建索引的情況 經常...
達夢資料庫和mysql索引引擎 達夢資料庫 索引
1.索引的種類和功能 聚集索引 每乙個普通表有且只有乙個聚集索引 唯一索引 索引資料根據索引鍵唯一 函式索引 包含函式 表示式的預先計算的值 位圖索引 對低基數的列建立位圖索引 位圖連線索引 針對兩個或者多個表連線的點陣圖索引,主要用於資料倉儲中 全文索引 在表的文字列上而建的索引。2.何時使用索引...