删除和添加索引,为什么要先加后删
来源:互联网 发布:in 软件 编辑:程序博客网 时间:2024/06/07 12:47
我们对待一张表创建和删除索引的原则是,先加后删。
避免索引交替期因索引缺失而引起更大业务,性能问题。
有两方面原因,分别从运维和研发的角度来谈。
1,对于运维来讲,当遇到告警DB故障时,服务器负载较高,数据库里存在大量慢查询SQL时,dba人员分析慢查sql后发现有更好的索引可以使用,需把当前执行计划选择性较差的索引删除,如果先删除旧索引,会造成本来已经很差的查询变得更烂,从而,数据库中的慢查会更多,服务器负载会更高,有一件破烂衣服总比光屁股暖和。我们可以先把合适的索引加上,确定查询sql走了该索引后,再删除低效的索引。
2,对于研发来讲,在提sql执行的时候,强烈建议先加后删索引,同样,在索引删除后,新索引创建前,业务高峰期可能就已经在数据库中产生了慢查询,对系统的稳定产生影响。另外,对于唯一索引的表,删除唯一索引后,可能会在短时间内产生大量重复业务数据,此刻再添加新的唯一索引会发生报错,造成新索引添加失败。
举例如下:
mysql> show create table product_date_price_f\G;*************************** 1. row ***************************Table: product_date_price_fCreate Table: CREATE TABLE `product_date_price_f` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'xxx',字段略PRIMARY KEY (`id`),UNIQUE KEY `u_product_date_price_1` (`product_id`,`res_id`,`departs_date`,`del_flag`),) ENGINE=InnoDB AUTO_INCREMENT=1946874818 DEFAULT CHARSET=utf8 COMMENT='举例表'
DROP INDEX u_product_date_price_1 ON product_date_price_f;ALTER TABLE product_date_price_f ADD UNIQUE INDEX u_product_date_price_2 (`product_id`, `res_id`, `departs_date`, `del_flag`, `stock_risk_attr`);
结果导致进入大量重复数据,新索引无法添加。
强烈建议的写法:先加后删
ALTER TABLE product_date_price_f ADD UNIQUE INDEX u_product_date_price_2 (`product_id`, `res_id`, `departs_date`, `del_flag`,`stock_risk_attr`); DROP INDEX u_product_date_price_1 ON product_date_price_f;
感谢大家。
阅读全文
0 0
- 删除和添加索引,为什么要先加后删
- mysql添加删除 (索引和字段)
- Mysql添加和删除唯一索引、主键
- mysql添加删除索引
- mysql添加、删除索引
- mysql索引删除,修改,添加
- hive--mysql添加删除索引
- Lucene添加删除索引(增量索引)
- MySQL 添加索引,删除索引及其用法
- 创建和删除索引
- 基本索引操作---添加删除更新文档
- mysql为字段添加和删除唯一性索引(unique)
- mysql_创建索引和删除索引
- oracle创建索引和删除索引
- mysql 创建索引和删除索引
- mysql 创建索引和删除索引
- mysql 创建索引和删除索引
- 添加和删除选项
- 网易有道2017内推编程题:洗牌 [python]
- 19.开源项目--分支管理
- 初识hadoop
- okhttp二次封装+单例模式+拦截器
- java中根据手机号获取手机号归属地
- 删除和添加索引,为什么要先加后删
- QWidget 设置背景色
- 【上海皿鎏软件股份有限公司】满足比例的无重复的9位数字
- 设计模式:原型模式
- 解决vue-cli npm run build之后vendor.js文件过大的问题
- 唯快不破:TCP/IP详解--滑动窗口与内核缓冲区之间的关系
- 浏览器提示正在下载代理脚本问题解决
- 【leetcode】最长连续序列(unordered_map的使用)
- 散列(hash)