如何在建立索引的時候不造成鎖表最終導至長事務

2021-06-28 02:41:42 字數 1870 閱讀 2675

11.5以後版本支援

create index i1 on tab1(c1) online

create index online 和 drop index online

現在可以以非獨佔的方式建立和刪除索引。可以使用create index onlinedrop index online語法在聯機或者動態環境中建立和刪除索引。資料庫和它的相關表不會被獨佔地鎖住,所以可以被更新或讀取。

在索引建立期間,如果索引建立時帶online關鍵字,則不需要在表上放置獨佔鎖。可以在表上進行讀取和更新。索引的建立不必等到可以在表上放置獨佔鎖。

如果索引是帶online關鍵字建立的,則資料庫伺服器用乙個特定的標誌記錄操作。現在,恢復操作將檢查那個標誌,並且可以重新建立索引。

使用create index online語句建立索引的優點有:

可以使用create index online語法建立附屬索引,但是online語法只在事務隔離級別為臟讀(dirty read)時才適用。索引建立時在表上放置乙個獨佔鎖,並等待所有其他掃瞄表的、使用索引分割槽的併發程序結束,然後才建立附屬索引。如果這個表正在被讀取或更新,則create index online語句等待獨佔鎖。

如果lock mode沒有被設為wait,則附屬索引的建立可能失敗,因為它不會等待其他使用者完成。

注意:在索引建立之後,當引擎更新系統編目資訊時,它會短時間地放置乙個鎖。

下面的清單 5 提供了帶online關鍵字使用create index的語法:

清單 5. 帶 online 關鍵字的 create index 示例

create index i1 on tab1(c1) online

onlidx_maxmem

onlidx_maxmem配置引數用於限制分配給原像日誌池或更新日誌池的記憶體大小。這些池是用online關鍵字建立索引時在共享記憶體中建立的。如果您計畫在被索引(使用 online 語法)的表列上完成其他操作,那兒這可能有用。

onlidx_maxmem的取值範圍是 16kb 到 4294967295。在 onconfig.std 中的預設大小是 5120。

這個配置引數可以用onmode -wf動態地修改或者用onmode -wm命令取代。

drop index online

drop index online允許刪除索引,而不需要獨佔鎖。即使在事務隔離級別為臟讀時也可以刪除索引(利用online關鍵字)。

使用drop index online語句刪除索引的優點有:

drop index online在表更新完成之後才執行。發出drop index online語句之後,新的操作不能引用該索引,但是當前的操作可以使用該索引,直到操作完成。資料庫伺服器等到所有當前使用者訪問完索引之後才刪除索引。

清單 6 包含帶 online 語法使用 drop index 的例子:

清單 6. 帶 online 語法使用 drop index 的示例

drop index i1 online

MySQL建立表的時候建立索引

要想使用索引提高資料表的訪問速度,首先,需要建立乙個索引,建立索引的方式,有三種。這種方式最簡單 方便,語法格式 create table 表名 欄位名 資料型別 完整性約束條件 欄位名 資料型別 完整性約束條件 欄位名 資料型別 unique fulltext spatial index key ...

Mysql建表的時候建立索引

建立表時可以直接建立索引,這種方式最簡單 方便。其基本形式如下 create table 表名 屬性名 資料型別 完整性約束條件 屬性名 資料型別 完整性約束條件 屬性名 資料型別 unique fulltext spatial index key 別名 屬性名1 長度 asc desc 其中,un...

Oracle如何在億級記錄表中建立索引

1.前階段做了個專案,需要將生產系統中的乙個資料,匯出到備份機中,這個表近40個字段,14億條的資料。資料抽取用的是開源的etl工具,比較了一下,還是先導出txt檔案,在匯入到備份機中,速度最快。2.下面對匯入資料時遇到的問題進行分析 問題一 不要自動建立表空間。因表空間較大,一開始只建立了乙個表空...