数据库中有多少行太多了?

Jua*_*nti 83 mysql sql database performance

我有一个拥有1,000,000条记录的MySQL InnoDB表.这太多了吗?或者数据库可以处理这个以及更多?我问,因为我注意到一些查询(例如,从表中获取最后一行)在表中的行(1秒)比在100行中慢(秒).

OMG*_*ies 109

我有一个带有1000000个寄存器的MySQL InnoDB表.这太多了吗?

不,1,000,000 (AKA记录)对于数据库来说并不算太多.

我问,因为我注意到一些查询(例如,获取表的最后一个寄存器)在表中有100万个寄存器比在100个寄存器中慢.

该声明中有很多要考虑的因素.通常的嫌疑人是:

  1. 写得不好的查询
  2. 不使用主键,假设表中存在一个主键
  3. 设计不良的数据模型(表格结构)
  4. 缺乏索引

  • @Brimstedt:我也一直认为名词应该是"指数",但我认为我从未见过有人将其用于数据库:来自维基百科:http://en.wikipedia.org/w/index.php?title =索引(数据库)&oldid = 332319104给Coding Horror先生:http://www.codinghorror.com/blog/archives/000638.html.关于这个主题有一篇有趣的SO帖子:http://stackoverflow.com/questions/1001366/. (17认同)
  • +1,但不是"索引"而不是"索引";-) (15认同)
  • 6.没有足够的内存分配给innodb的各种缓存 (7认同)
  • 5.过时的服务器规格<最后的手段. (4认同)

ami*_*ygi 62

我有一个超过97,000,000条记录的数据库(30GB数据文件),没有问题.

只需记住定义和改进表索引.

显而易见,1,000,000不是很多!(但如果你没有索引;是的,这很多)

  • 是否会在列中添加"主键"(通过选择自动增量)? (9认同)
  • @Nathan,实际上当你将一个列分配为一个主键时,它会自动变为索引,但是每个表只能有一个主键,如果你需要为某个列添加索引,为了优化查询,请使用这个http:// stackoverflow.com/a/3002635/932473 (7认同)

Jou*_*mer 18

使用'explain'检查查询并查看查询计划是否有任何问题.

  • 如果有人可以**解析**`EXPLAIN`会很好 (29认同)
  • 没有其他工具可以帮助您检查查询,因此最好开始学习`EXPLAIN` - 新手与否. (16认同)
  • @Deadpool [Mysql 解释解释](http://www.slideshare.net/phpcodemonkey/mysql-explain-explained) (7认同)
  • 虽然这是一个好主意,但这个答案本身并不适合给新手.EXPLAIN的输出不是很直观...... (6认同)

Mor*_*ker 13

我认为这是一个常见的误解 - 在数据库可扩展性方面,大小只是等式的一部分.还有其他问题很难(或更难):

  • 工作集有多大(即需要在内存中加载多少数据并积极处理).如果您只是插入数据然后对其执行任何操作,那么它实际上是一个很容易解决的问题.

  • 需要什么级别的并发性?是否只有一个用户插入/读取,或者我们有多个客户端同时运行?

  • 需要什么级别的承诺/耐久性和性能的一致性?我们是否必须确保我们能够兑现每次提交.如果平均交易速度很快,或者我们是否希望确保所有交易都可靠地快速(六西格玛质量控制,如http://www.mysqlperformanceblog.com/2010/06/07/performance-optimization-)和 - 六西格玛/).

  • 您是否需要执行任何操作问题,例如更改表模式?在InnoDB中,这是可能的,但速度极慢,因为它经常需要在前台创建一个临时表(阻止所有连接).

所以我要说明两个限制问题:

  • 您自己编写查询/具有良好索引的技能.
  • 您可以忍受等待ALTER TABLE语句的痛苦程度.

  • 编辑:有关ALTER TABLE创建临时表的建议有点过时.MySQL 5.5具有快速索引创建,而5.6现在具有在线DDL. (2认同)

Tho*_*ini 2

假设你用“寄存器”来表示“记录”,不,这并不算太多,MySQL 的扩展性非常好,并且可以保存与硬盘空间一样多的记录。

显然,搜索查询会变慢。除了确保字段正确索引之外,确实没有其他办法解决这个问题。

  • 从技术上讲,表的大小也可能受到您正在使用的文件系统的最大文件大小的限制。 (2认同)