Mysql添加索引


一、如何添加索引

索引的類型:

  • UNIQUE(唯一索引):不可以出現相同的值,可以有NULL值
  • INDEX(普通索引):允許出現相同的索引內容
  • PROMARY KEY(主鍵索引):不允許出現相同的值
  • fulltext index(全文索引):可以針對值中的某個單詞,但效率確實不敢恭維
  • 組合索引:實質上是將多個字段建到一個索引里,列值的組合必須唯一

1、普通索引
alter table table_name add index index_name (column_list) ;
2、唯一索引
alter table table_name add unique (column_list) ;
3、主鍵索引
alter table table_name add primary key (column_list) ;

4、組合索引

ALTER TABLE table_name ADD INDEX indx_name_city_age (name,city,age); 

二、線上環境添加索引

線上環境的數據量很大的情況向直接使用alter,由於鎖表的原因會影響業務系統的可用性,所以不能直接alter,一般采用以下方案

方案一:停止服務

  • 復制原表的結構,創建一張新表
  • 為新表添加索引
  • 將原表的數據導出,再導入到新表中
  • 將新表的表名修改為老表名

方案二:pt-online-schema-change,該方案與方案一相同,但是該工具可以不用停止服務

原理:

  • 首先它會新建一張一模一樣的表,表名一般是_new后綴
  • 然后在這個新表執行更改字段操作
  • 然后在原表上加三個觸發器,DELETE/UPDATE/INSERT,將原表中要執行的語句也在新表中執行
  • 最后將原表的數據拷貝到新表中,然后替換掉原表

方案三:使用主從復制,在從表中添加索引。

注意:無論哪種方案,建議在夜深人靜的時候干。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM