plsql中修改表索引名稱 大表加索引方案

2021-10-12 19:34:57 字數 1429 閱讀 8659

每個公司針對資料庫的設計都有套方案。最近在巡檢表的設計,發現之前有張表漏掉了針對更新時間欄位updated_at的索引,現在需要加上該索引。

我們都知道,為表增加索引是會對錶進行加鎖處理的。稍有不慎,可能會導致表被鎖後,業務無法進行讀寫操作而產生事故影響,通常都是報錯waiting for meta data lock。在對錶進行修改時,特別是生產上,我們首先要觀察對應的表此時是否在高併發讀寫(選擇操作時機)、表的量級資訊

整體思路是:

先建立一張表,結構和原表相同;

在新表上新增索引;

rename新錶為原表的表名,原表換新的名稱;

為原表新增索引;

待索引建立成功後,rename原表為原來的名稱,並將新表裡的資料匯入到原表中

sql可參考:

-- 假設需要新增索引的表為`fea_moni_res`

-- 1. 新建與表`fea_moni_res`同結構的表

create table fea_moni_res_tmp like fea_moni_res;

-- 2. 新表上新增索引

alter table fea_moni_res_tmp add index idx_index_name (col_name);

-- 3. *rename*新錶為原表的表名,原表換新的名稱

rename table fea_moni_res to fea_moni_res_1, fea_moni_res_tmp to fea_moni_res;

-- 4. 為原表新增索引,此步耗時較長

alter table fea_moni_res_1 add index idx_index_name (col_name);

-- 5. 待索引建立成功後,rename原表為原來的名稱,並將新表裡的資料匯入到原表中

rename table fea_moni_res to fea_moni_res_tmp, fea_moni_res_1 to fea_moni_res;

-- 需要根據業務來確定如果匯入資料

insert into fea_moni_res(col_name1, col_name2) select col_name1, col_name2 from fea_moni_res_tmp;

本文提供了一種為大表新增索引的方法。當然,此方案不是完美的。譬如,步驟3中的rename操作後,是極有可能會對業務產生影響的,因為業務需要根據歷史資料來判斷邏輯。此時可能不得不在步驟2之後,先行將原表中的資料匯入到新錶中,待完全匯入後再直接切表操作。此需要根據業務的場景來判斷,具體問題具體分析。

此處只是提供了一種方案,涉及到為大表新增字段、刪除欄位的表鎖操作均可參考。

plsql中修改表索引名稱 VBA工作表的引用方法

工作表說明 1 使用工作表的名稱 worksheets 彙總表 select 彙總表被選中 2 使用工作表的索引號 worksheets 3 select sheet4表被選中 worksheets 4 select 財務部表被選中 3 使用工作表的 名稱 工作表的 名稱顯示在vbe工程資源管理器視...

mysql大表修改表名原理 mysql大表修改結構

alter table執行時會對原表進行臨時複製,在副本上進行更改,然後刪除原表,再對新錶進行重新命名。在執行alter table時,其它使用者可以閱讀原表,但是對錶的更新和修改的操作將被延遲,直到新錶生成為止。新錶生成後,這些更新和修改資訊會自動轉移到新表上。注意,如果您在執行alter tab...

NPOI修改excel 的工作表名稱

因為工作上有個呼叫儲存過程的需求,但是excle表中色sheet名字有特殊符號。導致儲存過程一直報錯。無奈只能修改sheet名字,摸索了半天,才把 寫好。現如今把 記錄下來,方便以後可以隨時檢視。修改sheet名字 hisfile為原檔案位址 iworkbook workbook null if s...