因此,我在MySQL中使用InnoDB存储引擎的一个表将包含数十亿行(可能没有限制插入的数量)。
你能告诉我我能做些什么样的优化来帮助加快速度吗? 因为已有几百万行,它将开始变慢。
当然,如果你建议使用别的东西。我唯一的选择是PostgreSQL和Sqlite3。但我被告知sqlite3不是一个好选择。 至于postgresql,我完全不知道它是怎么回事,因为我从未使用它。
我想,在该表中每秒至少有大约1000-1500次插入。
答案 0 :(得分:6)
对你的问题的简单回答是肯定的,InnoDB将是数十亿行数据集的最佳选择。
有许多可能的优化。
最明显的优化是设置一个大缓冲池,因为缓冲池是InnoDB最重要的事情,因为InnoDB缓冲数据以及缓冲池中的索引。如果你有一个只有InnoDB表的专用MySQL服务器,那么你应该设置InnoDB使用的80%的可用RAM。
另一个最重要的优化是在表上有适当的索引(记住数据访问/更新模式),主要和次要。 (请记住,主索引会自动附加到二级索引)。
使用InnoDB还有一些额外的好处,例如防止数据损坏,自动恢复等。
至于提高写入性能,您应该将事务日志文件设置为总共4G。
您可以做的另一件事是分区表。
通过将bin-log-format设置为“row”,并将auto_inc_lock_mode设置为2(这将确保innodb在插入自动增量列时不会保持表级锁定),可以获得更高的性能。
如果您需要任何具体建议,可以与我联系,我愿意提供帮助。
答案 1 :(得分:2)
优化
MySQL 5.4版本没有 支持部分索引。[3]在MySQL中, 术语“部分指数”有时是 用于引用前缀索引,其中 每个值只有一个截断的前缀 存储在索引中。这是 另一种减少指数的技术 大小。[4]
答案 2 :(得分:1)
不知道MySQL / InnoDB部分(我认为它会应付)。但是如果你最终看到替代品,PostgreSQL可以在纸上管理无限大小的数据库。 (至少存在一个32TB数据库according to the FAQ。)
你能告诉我我可以做些什么样的优化来帮助加快速度?
您的milage将根据您的申请而有所不同。但是对于数十亿行,您至少需要分析数据,以便处理较小的表。
对于PostgreSQL,您还将考虑在适当的时候创建部分索引。
答案 3 :(得分:-1)
您可能需要查看:
http://www.mysqlperformanceblog.com/2006/06/09/why-mysql-could-be-slow-with-large-tables/
http://forums.whirlpool.net.au/archive/954126
如果你有一个非常大的表(数十亿条记录)并且需要数据挖掘表(查询大量数据的查询),mysql可以慢慢爬行。 大型数据库(200 + GB)很好,但在尝试读取不适合内存的大型组时,它们受IO / temp表绑定到磁盘以及其他多个问题。