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

时间:2009-12-18 03:23:09

标签: sql mysql database performance

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

)。

10 个答案:

答案 0 :(得分:108)

  

我有一个带有1000000个寄存器的MySQL InnoDB表。这太过分了吗?

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

  

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

该声明中有很多要说明的内容。通常的嫌疑人是:

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

答案 1 :(得分:57)

我的数据库包含 97,000,000 个记录( 30GB数据文件),并且没有任何问题。

请记住定义并改进您的表索引

很明显 1,000,000 并不多! (但如果你没有索引;是的,它很多)

答案 2 :(得分:17)

使用'explain'检查您的查询,看看查询计划是否有任何问题。

答案 3 :(得分:11)

答案 4 :(得分:3)

如果您的意思是100万行,那么这取决于索引的完成方式和硬件配置。对于企业数据库,甚至是体面设备上的开发数据库,​​一百万行不是很大的数量。

如果你的意思是100万列(不确定甚至可能在MySQL中),那么是的,这看起来有点大,可能会引起问题。

答案 5 :(得分:3)

注册?你的意思是记录吗?

如今,一百万条记录对于数据库来说并不是什么大不了的事。如果您遇到任何问题,可能不是数据库系统本身,而是您正在运行它的硬件。在你的硬件耗尽之前,你很可能不会遇到数据库问题,很有可能。

现在,显然有些查询比其他查询慢,但是如果两个非常相似的查询在不同的时间运行,则需要弄清楚数据库的执行计划是什么并对其进行优化,即使用正确的索引,正确的规范化等等

顺便说一下,表格中没有“最后”记录,从逻辑角度看它们没有固有的顺序。

答案 6 :(得分:3)

我见过有数十亿(索引)记录的非分区表,这些记录是自我加入分析工作的。我们最终划分了这个东西,但老实说,我们没有看到那么大的差异。

那就是说,那是在Oracle中,我没有在MySQL中测试过那么多的数据。索引是你的朋友:)

答案 7 :(得分:2)

假设你用“寄存器”表示“记录”没有,它并不太多,MySQL可以很好地扩展,并且可以保存与硬盘空间相同数量的记录。

显然,搜索查询会更慢。除了确保字段被正确编入索引外,实际上没有办法解决这个问题。

答案 8 :(得分:0)

表越大(如在其中的更多行中),如果没有索引,通常会运行较慢的查询。添加正确的索引后,您的查询性能应该提高或至少不会随着表的增长而降低。但是,如果查询本身在表变大时返回更多行,那么您将再次开始看到降级。

虽然1M行数不多,但它还取决于您在数据库服务器上的内存量。如果表太大而无法由服务器缓存在内存中,那么查询将会变慢。

答案 9 :(得分:0)

使用提供的查询将非常慢,因为使用排序合并方法对数据进行排序。

我建议重新考虑设计,以便您使用索引来检索它或确保它已经以这种方式排序,因此不需要排序。