java中sql字段太多可读性,sql - 数据库中有多少行太多了?

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

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

10个解决方案

106 votes

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

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

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

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

写得不好的查询

不使用主键,假设表中存在一个主键

设计不良的数据模型(表格结构)

缺乏索引

OMG Ponies answered 2019-06-12T18:16:54Z

55 votes

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

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

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

amir beygi answered 2019-06-12T18:17:31Z

17 votes

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

Journeyman Programmer answered 2019-06-12T18:17:55Z

9 votes

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

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

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

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

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

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

您自己编写查询/具有良好索引的技能。

您可以忍受等待ALTER TABLE语句的痛苦程度。

Morgan Tocker answered 2019-06-12T18:19:08Z

3 votes

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

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

GrayWizardx answered 2019-06-12T18:19:39Z

3 votes

寄存器? 你是说记录吗?

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

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

顺便说一句,表中没有“最后”记录这样的东西,从逻辑的角度看它们没有固有的顺序。

phoebus answered 2019-06-12T18:20:23Z

3 votes

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

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

Jé Queue answered 2019-06-12T18:20:54Z

2 votes

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

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

Andreas Bonini answered 2019-06-12T18:21:24Z

0 votes

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

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

jvilalta answered 2019-06-12T18:21:56Z

0 votes

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

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

Louis answered 2019-06-12T18:22:28Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值