首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mysql如果表中的数据太多该怎么办

Mysql如果表中的数据太多该怎么办
EN

Stack Overflow用户
提问于 2018-09-29 12:16:44
回答 4查看 983关注 0票数 1

一个表中的数据每天都在增加,这可能会降低性能。我在想,如果我可以创建一个触发器,将表A移动到A1中,并每隔一段时间创建一个新表A,这样在表A中插入或更新可能会更快。这是节省性能的正确方法吗?如果没有,我应该怎么做?(例如,在表A中每秒插入或更新1000行,3年后性能如何?)

我们正在为一家工厂设计软件。有制造pcb板的生产线。几年来,我们每秒需要插入近60条pcb记录。(1000行似乎被夸大了)

EN

回答 4

Stack Overflow用户

发布于 2018-10-04 12:24:00

首先,一个表需要几个table的空间。你的磁盘有那么大吗?是的,MySQL可以处理这么大的一张桌子。

它会慢下来吗?这取决于

  • 索引。如果你有“随机”索引,INSERTs会减慢到每次磁盘命中大约1次插入。在旋转的硬盘上,这仅为每秒100左右。SSD可能能够处理1000/秒。请提供SHOW CREATE TABLE.
  • Does表有没有AUTO_INCREMENT?如果是,则需要是BIGINT,而不是INT。但是,如果可能的话,把它们全部去掉(以节省空间)。同样,让我们看看SHOW.
  • "Point“查询(通过索引加载一行)基本上不受表大小的影响。它们在万亿行表中的速度大约是百万行表中的两倍。点查询将需要几毫秒或几十毫秒;没什么大不了的。
  • 表扫描将需要几个小时或几天;希望您不会这样做。
  • 对表的一部分进行十亿行扫描将需要几天或几周时间,除非您正在使用PRIMARY KEY或有一个“覆盖”索引。让我们来看看查询和SHOW.

最好的技术不是存储数据。在数据到达时对其进行总结,保存摘要,然后丢弃原始数据。(好的,您可以将原始数据存储在csv文件中,以防需要构建新的汇总表或修复现有汇总表中的错误。)

使用几个汇总表而不是原始数据可以将数据缩减到1TB以下,并使相关查询的运行速度提高10倍。(好的,点查询只会稍微快一点。)

PARTITIONing (或者以其他方式拆分表)?那得看情况。让我们来看看查询和SHOW。在许多情况下,PARTITIONing不会加速任何事情。

您是否要删除或修改现有行?我真希望不是这样。这增加了更多方面的问题。另一方面,如果你需要清除“旧的”数据,那么PARTITIONing就是一个很好的选择。对于3年的数据,我会使用PARTITION BY RANGE(TO_DAYS(..))并按月分区。那么每月一次的DROP PARTITION将会非常快。

票数 1
EN

Stack Overflow用户

发布于 2018-09-29 12:31:24

非常庞大的数据可能会降低服务器的性能,所以有一种方法可以解决这个问题:

1)您需要使用archive存储机制创建另一个表来存储归档数据(旧数据)。( https://dev.mysql.com/doc/refman/8.0/en/archive-storage-engine.html )

2)创建MySQL作业/调度程序,将较旧的记录移动到存档表。在服务器最大空闲时的时隙中进行调度。

3)将较旧的记录移至存档表后,对原始表重新建立索引。

这将服务于性能的目的。

票数 0
EN

Stack Overflow用户

发布于 2018-09-29 12:43:58

1000个行表的性能不太可能足够差,以至于每隔一段时间进行一次表复制就是总体的净收益。不管怎样,新的表有哪些旧表没有的可以提高性能的东西呢?

让表高效执行的关键是智能表设计和索引管理。这就是无数的行表在地理空间工作、图书馆目录、天文学以及互联网搜索引擎如何找到有用数据等方面的有效性。

定义的每个索引都会导致更多的mysql影响,尤其是在行插入时。假设读操作多于插入操作,这是一个优势,因为大多数查询都能快速完成,这要归功于合适的索引。

最好在对表的查询有透彻的理解的情况下定义索引-无论是在质量上还是在数量上。而且,如果查询的性质在几个月或几年中有任何趋势,那么索引将需要添加、修改或-是的-甚至删除。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52565060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档