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,将原表中要执行的语句也在新表中执行
- 最后将原表的数据拷贝到新表中,然后替换掉原表
方案三:使用主从复制,在从表中添加索引。
注意:无论哪种方案,建议在夜深人静的时候干。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341