包含 5000 万数据的表和添加索引需要太多时间

Posted

技术标签:

【中文标题】包含 5000 万数据的表和添加索引需要太多时间【英文标题】:Table with 50 million data and adding index takes too much time 【发布时间】:2017-02-05 06:13:30 【问题描述】:

我正在处理大约 5000 万数据(2GB 大小)的表。我需要优化性能。因此,当我通过 phpmyadmin 面板在列上添加索引时,表被锁定并导致在该表的队列中保留所有查询,并最终导致重新启动/终止所有查询。 (是的,我忘了提到我是在生产中这样做的。我的错!)

当我做一些研究时,我发现了一些解决方案,比如创建重复表,但还有其他方法吗?

【问题讨论】:

【参考方案1】:

您可以按照以下步骤操作,

    创建临时表 在第一个表上创建触发器(对于 插入、更新、删除),以便将它们复制到临时 表 小批量,迁移数据完成后,将表重命名为新的 表,然后删除另一个表

但正如您所说,您是在生产环境中执行此操作,那么您需要在删除表并创建另一个表时考虑实时流量

【讨论】:

是的,我可以。我会再试一次 更好的是,使用pt-online-schema-change;它会为您自动完成所有这些操作。

以上是关于包含 5000 万数据的表和添加索引需要太多时间的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 迁移 - 为 5000 万条数据添加新列

为什么要将表和索引建立在不同的表空间?

ORACLE怎么根据字段值找出所有的表和字段?

oracle表空间设计基本原则

截断需要太多时间 hsqldb

在 SQL 中的表或视图上添加索引