索引操作到底发生了啥?

Posted

技术标签:

【中文标题】索引操作到底发生了啥?【英文标题】:What exactly happened with the indexing operation?索引操作到底发生了什么? 【发布时间】:2010-10-03 07:58:12 【问题描述】:

我今天正在索引一个包含 20 亿条记录的巨大表。我以为 mysql 会吃掉我的 2TB 驱动器...磁盘消耗不断增加到 400GB,然后是 500GB,最后下降到 180GB,MySQL 说成功添加了索引。为什么空间增加,最后发生了什么?有人可以给我一些指点吗?

【问题讨论】:

【参考方案1】:

顺便说一下,昨天我回复了a question on how to make index creation faster in MySQL,我的研究得出以下结论:

CREATE INDEXDROP INDEX 命令通过创建一个用请求的索引集定义的新空表来工作。然后,它将现有行一一复制到新表中,同时更新索引。以这种方式将条目插入索引中,其中键值未排序,需要随机访问索引节点,并且远非最佳。复制原始表中的所有行后,删除旧表并使用原始表的名称重命名副本。

来源:Overview of Fast Index Creation

【讨论】:

有一个sql命令“SHOW PROCESSLIST;”您可以使用它来监控 mysql 正在做什么,并且可以确认这一点。 非常有趣...感谢您的洞察力。我的问题之一是我不知道 InnoDB 支持分区,所以我求助于使用 MyISAM。不确定此时将引擎转换为 InnoDB 是否合乎逻辑。

以上是关于索引操作到底发生了啥?的主要内容,如果未能解决你的问题,请参考以下文章

C++ 这里到底发生了啥? [关闭]

android“强制关闭”内存到底发生了啥

无限嵌套列表中到底发生了啥?

View.post @Runnable 到底发生了啥 [重复]

所涉及的递归调用到底发生了啥?

dubbo中registryroutedirectoryclusterloadbalanceroute的关系以及一个引用操作和调用操作到底干了啥