Mysql 索引迁移策略

近日在核查项目中的一些慢sql时发现一个很鸡仔儿的问题,本地开发库表中索引跟生产上差距很大,又因为生产库登录各种麻烦,需要各种验证码,那么多的慢sql分给好些个人,不可能让大家一人登一次数据库,所以就有了这个索引迁移的问题,其实就是把生产的库表的索引同步到本地库。针对这一问题,经过查阅各种资料得出以下的解决策略。

1.索引导出

  第一步就是将生产库中的索引导出来,这里的导出的索引不应该包含主键约束,任何一张表在创建时按照规定都是会加主键的,所以这里没有必要。以下就是导出mysql指定数据库除主键的所有索引的sql。

SELECT

CONCAT(

'ALTER TABLE `',

TABLE_NAME,

'` ',

'ADD ',

IF (

NON_UNIQUE = 1,

CASE UPPER(INDEX_TYPE)

WHEN 'FULLTEXT' THEN

'FULLTEXT INDEX'

WHEN 'SPATIAL' THEN

'SPATIAL INDEX'

ELSE

CONCAT(

'INDEX `',

INDEX_NAME,

'` USING ',

INDEX_TYPE

)

END,

IF (

UPPER(INDEX_NAME) = 'PRIMARY',

CONCAT(

'PRIMARY KEY USING ',

INDEX_TYPE

),

CONCAT(

'UNIQUE INDEX `',

INDEX_NAME,

'` USING ',

INDEX_TYPE

)

)

),

'(',

GROUP_CONCAT(

DISTINCT CONCAT('`', COLUMN_NAME, '`')

ORDER BY

SEQ_IN_INDEX ASC SEPARATOR ', '

),

');'

) AS 'all table index'

FROM

information_schema.STATISTICS

WHERE

TABLE_SCHEMA = 'test'

AND UPPER(INDEX_NAME) != 'PRIMARY'

GROUP BY

TABLE_NAME,

INDEX_NAME

ORDER BY

TABLE_NAME ASC,

INDEX_NAME ASC

注意:复制sql时记得更改数据库名 以上标红的 test 是我本地库。

2.索引删除

导出生产索引后,将脚本保存,接下来就要执行本地库的索引删除了,这里的删除索引也需要先构建出删除索引的alter语句。

SELECT

CONCAT(

'ALTER TABLE `',

TABLE_NAME,

'` ',

GROUP_CONCAT(

DISTINCT CONCAT(

'DROP ',

IF (

UPPER(INDEX_NAME) = 'PRIMARY',

'PRIMARY KEY',

CONCAT('INDEX `', INDEX_NAME, '`')

)

) SEPARATOR ', '

),

';'

)

FROM

information_schema.STATISTICS

WHERE

TABLE_SCHEMA = 'test'

and UPPER(INDEX_NAME) != 'PRIMARY'

GROUP BY

TABLE_NAME

ORDER BY

TABLE_NAME ASC

以上sql是删除表中不包含主键的索引

注意数据库的名称一定不要搞反了。

3.索引插入

先执行第二步的得到的脚本,再执行第一步的脚本。

 

Mysql 索引迁移策略的更多相关文章

  1. mysql索引使用策略及优化

    原文地址:http://blog.codinglabs.org/articles/theory-of-mysql-index.html 索引使用策略及优化 MySQL的优化主要分为结构优化(Schem ...

  2. mysql 索引使用策略及优化

    索引使用策略及优化 MySQL的优化主要分为结构优化(Scheme optimization)和查询优化(Query optimization).本章讨论的高性能索引策略主要属于结构优化范畴.本章的内 ...

  3. MySql索引使用策略

    MySql索引 索引优点 1.可以通过建立唯一索引或者主键索引,保证数据的唯一性.2.提高检索的数据性能3.在表连接的连接条件 可以加速表与表直接的相连 4.建立索引,在查询中使用索引 可以提高性能 ...

  4. MySQL索引与优化策略

    1. MySQL索引实现 在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,下面主要讨论MyISAM和InnoDB两个存储引擎的索引实现方式. MyISAM索引实现 M ...

  5. MySQL索引背后的之使用策略及优化(高性能索引策略)

    为了讨论索引策略,需要一个数据量不算小的数据库作为示例.本文选用MySQL官方文档中提供的示例数据库之一:employees.这个数据库关系复杂度适中,且数据量较大.下图是这个数据库的E-R关系图(引 ...

  6. mysql索引之四:复合索引之最左前缀原理,索引选择性,索引优化策略之前缀索引

    高效使用索引的首要条件是知道什么样的查询会使用到索引,这个问题和B+Tree中的“最左前缀原理”有关,下面通过例子说明最左前缀原理. 一.最左前缀索引 这里先说一下联合索引的概念.MySQL中的索引可 ...

  7. MySQL全面瓦解24:构建高性能索引(策略篇)

    学习如果构建高性能的索引之前,我们先来了解下之前的知识,以下两篇是基础原理,了解之后,对面后续索引构建的原则和优化方法会有更清晰的理解: MySQL全面瓦解22:索引的介绍和原理分析 MySQL全面瓦 ...

  8. 深入浅出分析MySQL索引设计背后的数据结构

    在我们公司的DB规范中,明确规定: 1.建表语句必须明确指定主键 2.无特殊情况,主键必须单调递增 对于这项规定,很多研发小伙伴不理解.本文就来深入简出地分析MySQL索引设计背后的数据结构和算法,从 ...

  9. MYSQL索引结构原理、性能分析与优化

    [转]MYSQL索引结构原理.性能分析与优化 第一部分:基础知识 索引 官方介绍索引是帮助MySQL高效获取数据的数据结构.笔者理解索引相当于一本书的目录,通过目录就知道要的资料在哪里, 不用一页一页 ...

随机推荐

  1. Spring Boot tomcat

    定制内嵌 Tomcat 设置内嵌Tomcat的端口 Spring Boot 内嵌的 Tomcat 服务器默认运行在 8080 端口.如果,我们需要修改Tomcat的端口,我们可以在 src/main/ ...

  2. Netty buffer缓冲区ByteBuf

    Netty buffer缓冲区ByteBuf byte 作为网络传输的基本单位,因此数据在网络中进行传输时需要将数据转换成byte进行传输.netty提供了专门的缓冲区byte生成api ByteBu ...

  3. shiro-过滤器

    http://shiro.apache.org/authorization.html#Authorization-PermissionGranularity shiro默认的过滤器 Shiro内置了很 ...

  4. Node.js模板引擎的深入探讨

    每次当我想用 node.js 来写一个 web 相关项目的时候.我总是会陷入无比的纠结.原因是 JavaScript 生态圈里的模板引擎实在太多了,但那么多却实在找不出一个接近完美的,所谓完美的概念就 ...

  5. 对Faster R-CNN的理解(1)

    目标检测是一种基于目标几何和统计特征的图像分割,最新的进展一般是通过R-CNN(基于区域的卷积神经网络)来实现的,其中最重要的方法之一是Faster R-CNN. 1. 总体结构 Faster R-C ...

  6. Visual Studio 2015 update 3各版本下载地址

    微软在06月27日发布了Visual Studio 2015 Update 3 .在MSDN中微软也提供下载,而且MSDN的Visual Studio 2015 Update 3与官方免费下载的文件是 ...

  7. tensorflow 在加载大型的embedding模型参数时,会遇到cannot be larger than 2GB

    这种问题是,对于每一个变量 variable 由于是基于protobuf存在这大小限制(2G),这个时候,我们需要将embedding拆开,拆分成N等分,来使得每一个 variable都在2G以下; ...

  8. 程序猿必备的10款超炫酷HTML5 Canvas插件

    1.超炫酷HTML5 Canvas 3D旋转地球动画 这是一款基于HTML5 Canvas的3D地球模拟动画,动画以太空作为背景,地球在太空中旋转,同时我们也可以拖拽鼠标来从不同的角度观察地球.另外我 ...

  9. python线程池(threadpool)模块使用笔记 .python 线程池使用推荐

    一.安装与简介 pip install threadpool pool = ThreadPool(poolsize) requests = makeRequests(some_callable, li ...

  10. XML格式化工具

    做接口开发的时候,往往接受参数或返回值是一个XML的字符串.如下图,不方便辨识 两种方法, 1.将它保存为xxx.xml,然后用浏览器打开.这种方法稍微有些麻烦. 2.使用 UltraEdit 工具