2009-04-29 21 views
2

我对包含20,000,000条记录的索引MySQL表进行了查找测试,根据我的结果,即使在与包含4,000条记录的另一个表进行连接时,也需要0.004秒来检索给定ID的记录。这是在3GHz双核机器上,只有一个用户(我)访问数据库。写作速度也很快,因为这张桌子花了十分钟时间创造了所有20,000,000条记录。具有20,000,000条记录的MySQL表是否会快速并发访问?

假设我的测试是准确的,我可以期望性能如同在生产服务器上一样快,比如有200名用户同时从这张表中读取和写入数据?

我认为InnoDB会是最好的吗?

+0

什么存储引擎? – Rob 2009-04-29 15:53:03

+0

我有超过20,000,000行的表。他们是无辜的,他们工作得很好。请务必阅读手册和所有配置开关中的innodb,并购买大量的RAM! – Till 2009-04-29 16:05:17

+1

桌子的引擎选择取决于它会发生什么。 INNODB是一个安全的选择,但它的表是'只读和附加'(如日志),然后MYISAM可能是一个有效的选择。 – 2009-04-29 19:24:50

回答

3

取决于任何数量的因素:

  • 服务器硬件(特别是RAM)
  • 服务器配置
  • 数据大小
  • 索引和索引大小
  • 存储引擎数
  • 作家/读者比例

我不希望它能很好地扩展。更重要的是,这种事情是重要的推测。对其进行基准测试并亲自查看。

关于存储引擎,我不敢用除InnoDB之外的任何东西来读取和写入大小的表。如果您运行的任何写入查询不是原始插入或单行更新,则最终会使用MyISAM锁定表,从而导致可怕的性能。

6

这取决于您要使用的存储引擎以及读/写比率。

如果有很多写入,InnoDB会更好。如果读取时偶尔会写入,MyISAM可能会更快。 MyISAM使用表级锁定,所以它锁定整个表只要你需要更新。 InnoDB使用行级锁定,所以你可以在不同的行上有并发更新

InnoDB绝对安全,所以我会坚持它。

顺便说一句。请记住,现在RAM非常便宜,所以买了很多。

0

只要您的架构设计和DAL构建得足够好,您就可以从里面理解查询优化,可以在专业级别调整所有服务器配置设置,并且拥有“足够”的硬件配置,是的病理案例)。

两个引擎的答案相同。

0

您应该执行负载测试来验证,但只要索引已正确创建(意味着索引针对您的查询语句进行了优化),SELECT查询应该以可接受的速度执行(INSERTS和/或UPDATES可能更多的是速度问题,尽管取决于你有多少索引以及索引有多大)。

2

没有任何理由说MySql无法处理那种没有任何重大问题的负载。还有一些其他变量涉及到(否则,这是'一段字符串'的问题')。就我个人而言,我在各种数据库中有很多表格,远远超出了这个范围。

  • 多大的每个记录(平均)
  • 多少RAM如何在数据库服务器有 - 又有多少被分配到MySQL/InnoDB中的各种配置。

默认配置可能只允许磁盘和客户端之间的默认8MB缓冲区(这对于单个用户来说可能工作正常) - 但尝试通过这种方式适应6GB +数据库注定会失败。这个问题是真正的btw - 并且导致数据库/网站每天发生数次崩溃,直到我被带入麻烦 - 拍摄它。

如果您有可能会对该数据库做更多的工作,我建议让一些人有更多的经验,或者至少是能够给予某些优化的人。阅读'High Performance MySQL, 2nd Edition'是一个好的开始,正如看到一些工具,如Maatkit

相关问题