我在MySQL的表中有10mln行,在这个表上有7个索引。现在,当我尝试添加8时,需要无限的时间才能完成此操作。有没有什么办法可以解决这个问题,以便轻松快速地添加第8个索引?如何快速创建索引?
回答
是的,这是我想说的 – 2010-05-24 21:40:57
当我看到执行ALTER TABLE来更改列的默认值(或可为空)时,我感到震惊是通过复制整个表并重新创建所有索引来执行的。这些事情在其他DMBS上花费的时间很少;推荐在MySQL上为大表执行的方式是使用文件系统 - 用空数据文件更改表定义并将完整的数据文件放回原位。 – 2010-05-24 21:49:35
本文的发布者完全错误。在很多情况下,当您执行ALTER TABLE时,MySQL会重建表,但它绝不会在每个ALTER语句中多次重建表;此外,如果需要,您可以使用单个ALTER进行任意数量的修改。 – MarkR 2010-05-24 22:24:13
不,创建索引所需的时间与您拥有的数据量成正比。在MS SQL中,我在大约10分钟的时间内在一个包含很多记录的表上创建索引。
编辑:看到评论后,请详细说明无限。根据定义,你说它永远不会结束,我的答案与长期运行的索引创建有关,而不是无限的。
是的,花了15分钟 – 2010-05-24 21:40:41
然后你是一样好随着它的到来。索引是一项非常密集的任务,特别是有很多记录。 – 2010-05-24 21:54:08
您正在使用哪种引擎? ALTER TABLE ... CREATE INDEX的实现变化很大。
使用MyISAM,任何索引更改都需要完整的表重建。这不是固有的引擎,而是一个从未被修复的错误。
使用InnoDB,创建二级索引不需要重建表,但只有在使用InnoDB插件(而不是旧的,已发货的引擎)时才能使用此优化。更改主键总是需要重建,因为它是聚集的。
重建表格(无论是哪种情况)都需要很多工作,因为它必须重建所有现有索引以及重写行以完成操作。如果你的桌子适合RAM(10M行听起来应该很容易),这是相当快的。
重建一个不适合ram的桌子相当昂贵,我建议尽可能避免它。
重建不适合ram的个别索引非常昂贵,最好避免。
您需要多长时间添加新的索引?也许你可以使用已经创建的索引填充表格?
- 1. MATLAB:快速创建索引
- 2. 创建快速搜索值
- 3. 如何创建索引更快
- 4. 索引如何使速度更快?
- 5. 关于如何快速索引db
- 6. 快速创建data.frame
- 7. 快速创建JavaMail
- 8. 如何建模数据/索引以快速查找时间片
- 9. 如何构建我的Elasticsearch索引以快速更改数据?
- 10. 快速矢量索引
- 11. 如何在搜索引擎上为我的网站创建快速链接?
- 12. 如何快速创建数百场
- 13. 如何快速创建一个servlet
- 14. 如何快速创建子查询
- 15. 如何在C#中快速创建TempFile?
- 16. 如何快速创建ip范围?
- 17. 如何创建WordPress快速入门包?
- 18. 如何快速创建新行
- 19. Ruby:如何快速创建attr_accessor
- 20. 如何快速创建大型PDF
- 21. 如何快速用C创建阵列++
- 22. 索引的搜索速度更快吗?
- 23. 索引如何帮助在mysql中快速搜索数据
- 24. 如何在BIG XML文件中搜索快速/索引?
- 25. php快速创建表格
- 26. 快速创建Singelton类?
- 27. CVPixelBufferCreateWithBytes快速创建CIImage
- 28. 创建快速GUI前端
- 29. 快速创建变量
- 30. 如何加速创建表,索引和存储过程
它不应该是无限的。请提供您的表格架构和索引的详细信息。 – 2010-05-24 21:12:56
如果确实需要“永久”,请检查您的磁盘空间是否用完 - 创建索引可能需要大量的临时空间。 – nos 2010-05-24 21:27:39
这是每个下一个索引需要更多时间的MySQL的有点bug。我有400 MB的真实和1,6 MB的交换内存,创建索引时根本没有使用,而且我有20 GB的空间 – 2010-05-24 21:39:03