索引操作到底发生了啥?
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 INDEX
和DROP INDEX
命令通过创建一个用请求的索引集定义的新空表来工作。然后,它将现有行一一复制到新表中,同时更新索引。以这种方式将条目插入索引中,其中键值未排序,需要随机访问索引节点,并且远非最佳。复制原始表中的所有行后,删除旧表并使用原始表的名称重命名副本。来源:Overview of Fast Index Creation
【讨论】:
有一个sql命令“SHOW PROCESSLIST;”您可以使用它来监控 mysql 正在做什么,并且可以确认这一点。 非常有趣...感谢您的洞察力。我的问题之一是我不知道 InnoDB 支持分区,所以我求助于使用 MyISAM。不确定此时将引擎转换为 InnoDB 是否合乎逻辑。以上是关于索引操作到底发生了啥?的主要内容,如果未能解决你的问题,请参考以下文章
View.post @Runnable 到底发生了啥 [重复]
dubbo中registryroutedirectoryclusterloadbalanceroute的关系以及一个引用操作和调用操作到底干了啥