这是我第一次使用包含1000万条记录的表构建数据库。该表是一个成员表,其中包含成员的所有详细信息。
构建数据库时需要注意什么?
我需要特殊版本的MySQL吗?我应该使用MyISAM还是InnoDB?
答案 0 :(得分:4)
首先,您可能需要退后一步并重新检查您的架构。你是如何在成员表中获得1000万行的?你真的有1000万会员(似乎很多)?
我怀疑(虽然我不确定)您的成员少于1000万,在这种情况下,您的表格将无法正确构建。请发布架构,这是我们帮助您的第一步。
如果你做有1000万会员,我的建议是让你的应用程序与供应商无关(即标准SQL)。然后,如果你开始遇到问题,只需抛弃当前的DBMS并用更强大的DBMS替换它。
一旦你建立了一个合适的,那么然后只有我会建议使用特定于供应商的东西。否则,改变将是一个痛苦的过程。
BTW,1000万行并不是真正的大数据库表,至少不是我来自的地方。除此之外,以下内容很重要(不一定是详尽的清单,但是一个良好的开端)。
"select * from ..."
的人应该被提交。答案 1 :(得分:0)
至少使用InnoDB。当你意识到MyISAM刚丢失你的数据时,你会感到痛苦......
除此之外,你应该提供更多关于你想做什么的信息。
答案 2 :(得分:0)
如果您没有数据完整性和原子操作要求,则无需使用InnoDB。如果表之间有外键,并且需要保留约束,或者需要在原子操作中更新多个表,则需要使用InnoDB。否则,如果您只需要使用该表进行分析,MyISAM就可以了。
对于查询,请确保构建智能索引以适应查询。例如,如果要按列c排序并根据列a和b进行选择,请确保您的索引按顺序包含列a,b和c,并且该索引包含每列的完整长度而不是前缀。如果您没有正确执行索引,那么对大量数据进行排序将会导致您死亡。见http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html
关于InnoDB的一个注释,并设置和测试一个大表。如果您开始注入数据,则需要数小时。确保定期发出提交,否则如果你想因任何原因停止和重做,你最终必须等待数小时进行事务恢复,或者2)杀死mysqld,将InnoDB recover标志设置为no recover并重新启动。此外,如果你想从头开始重新注入数据,DROP表并重新创建它几乎是瞬间的,但实际上“删除表”需要几个小时。