我有一个包含1,000,000条记录的MySQL InnoDB表。这太多了吗?或者数据库可以处理这个以及更多?我问,因为我注意到一些查询(例如,从表中获取最后一行)在表中的行(1秒)比在100行中慢(
)。答案 0 :(得分:108)
我有一个带有1000000个寄存器的MySQL InnoDB表。这太过分了吗?
不,1,000,000 行(AKA记录)对于数据库来说并不算太多。
我问,因为我注意到一些查询(例如,获取表的最后一个寄存器)在表中有100万个寄存器比在100个寄存器中慢。(/ p>
该声明中有很多要说明的内容。通常的嫌疑人是:
答案 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)
使用提供的查询将非常慢,因为使用排序合并方法对数据进行排序。
我建议重新考虑设计,以便您使用索引来检索它或确保它已经以这种方式排序,因此不需要排序。