鍍金池/ 問答/Java  PHP  Python  數(shù)據(jù)庫(kù)/ 為線上的數(shù)據(jù)表增加或刪除索引

為線上的數(shù)據(jù)表增加或刪除索引

如題,當(dāng)我為數(shù)據(jù)庫(kù)中的某一張表添加或刪除索引時(shí)我有兩種選擇

  1. 使用 alter table 更改表結(jié)構(gòu)
  2. 使用 create/drop index 命令

這兩種方法哪一個(gè)好一點(diǎn)?我要考慮的是,如果這張表的數(shù)據(jù)量比較大,在創(chuàng)建/刪除索引的操作中會(huì)不會(huì)導(dǎo)致整張表被上鎖然后導(dǎo)致用戶沒有辦法進(jìn)行寫入操作?

我也想過把這張表備份一份,然后在備份表上操作,但是如果在操作的過程中肯定會(huì)有寫入操作,這樣就導(dǎo)致了備份表與實(shí)際表的數(shù)據(jù)不統(tǒng)一。

不知道到有沒有好的方法和思路?平時(shí)我的項(xiàng)目數(shù)據(jù)量都比價(jià)小,沒有考慮過這種問題,還請(qǐng)各路大神賜教!

回答
編輯回答
不討囍

不知道你具體使用的是什么數(shù)據(jù)庫(kù),我了解的mysql

mysql 5.6 以前的版本添加索引會(huì)阻塞讀寫,影響業(yè)務(wù)。mysql 5.6以后的版本添加索引具有新特性在線DDL,影響較小,只有開始和結(jié)束階段,其他時(shí)間不阻塞讀寫。
最好的方法是使用在線ddl工具 pt-osc ,但是一些限制,比如必須有主鍵,不能有觸發(fā)器等...

2017年7月9日 03:30