![]() |
1
4
UUID效率低下 当将UUID与大型表混合时,您将遇到性能灾难。 即使是通过主键获取一行的简单操作,通常也会涉及磁盘命中。这加起来会产生大量的I/O,可能太多了,无法容忍。 50M选择/天=600/秒。你的磁盘系统每秒能处理近600次读取吗? 不记录
另一个问题是,有很多“大”列。而且,平均每行2KB,可能有许多行使用“非记录”存储。这涉及另一个磁盘命中。什么是
一定要避免部分缓解这个问题
这一建议尤其适用于
懒惰评估
如果选择有过滤(
有时可以通过构建一个执行过滤的派生表来避免额外的I/O,留下外部
缩小UUID 您使用的是哪种类型的UUID?如果它是MySQL使用的“类型1”,则可以重新排列id的位,使其大致按时间顺序排列;这对以下方面有很大帮助 某些 查询。
细节: http://mysql.rjweb.org/doc.php/uuid
即使没有这个,36字节的UUID也可以很容易地缩小到16字节,以便放入
上面的链接讨论了这种收缩。此外,8.0内置了必要的功能。 MariaDB 10.7“将具有”UUID 数据类型 这消除了本答案中讨论的大部分内容。 压缩 (我不赞成InnoDB的压缩,所以我不会提及。不管怎样,它不太可能提供超过2倍的压缩。) 如果压缩这些XML字符串,它们将收缩(大约)3倍。这将节省约2TB。 但是在客户端进行压缩(和解压缩);这减轻了服务器的负担,降低了客户端和服务器之间的带宽。 XML是一种庞大的数据表示方式,但重新格式化它可能并非易事。(因此,我只提到压缩。)
注意,压缩后,该列应
其他“文本”列也是如此,通常是“大”列。 拆分桌子 我什么也看不到 重要的 将两个笨重的柱子分开的好处或缺点。事实上,它们是“非正式的”,这意味着InnoDB已经提供了你提出的大部分好处。(MyISAM会从你的拆分中受益。但不要使用那个引擎。) 这是拆分表的一些好处,但可能(在您的情况下)没有足够的好处来保证更改。如果新表也有一个uuid作为PK,即使它与当前ID相同,情况尤其如此。 10M插入件
1000万1行
我建议对插件进行“批处理”。单身
皇家音乐学院 RAM越多越好。有了7TB的RAM(未来为25TB),我所说的大部分内容都消失了。但这在今天是不切实际的。因此,我正在推动缩小表大小,避免UUID或按时间顺序排列(如果有用)等。 如果5%的基于uuid的索引可以放入缓冲池,那么95%的选择将需要命中磁盘。 这是我大部分讨论背后的原则。 注:PK是一个索引,但包括所有数据。 注意:通过辅助索引的查找涉及两个BTree查找。如果每个都基于一个uuid,那么很有可能出现两次磁盘命中。 注意:您的双表方法将涉及2次查找。每一项都可能低于上述“95%”,但仍然如此。 分区和并行查询 Aurora在这方面领先于MySQL(和MariaDB)。但仍然没有多少好处。 将每个分区划分为不同的分区,消除了较浅的BTree的好处。(这甚至可能会减缓速度。) 如果您受CPU限制,并行查询会有所帮助。但我预测你是I/O受限的,将在25TB时崩溃。每个并行查询将花费大部分时间等待从磁盘读取块。
我假设每天的50M选择来自不同的连接?其中许多是“同时”发生的?这使您可以“并行”执行查询。我认为Aurora的“并行查询”针对的是一个单一的、复杂的、,
一种方式
您的主要疑问不会从任何形式的
索引
鉴于几乎所有
这些是最佳的:
在第二种情况下,建议的更改避免了对结果进行排序的需要,因为可以简单地按所需的顺序提取所需的行。(除非有很多行,否则这不太可能对性能产生太大影响。UUID问题主导了性能问题。) |
![]() |
2
0
正如你所说,如果没有几天的停机时间,你的桌子现在太大了,无法重新组织。所以再加一张桌子。 要向这样的实体(表)添加属性(列)而不完全重新组织表,请创建另一个表,一个键值表。它应该与此表具有相同的PK,并将保存新数据。
现在,您可以将新的属性数据插入到这个新表中,而不是将其插入到现有的怪物表中。
假设你有两个新属性。我们给他们打电话吧
然后,当你想检索它们时,使用一些左键。
要搜索,你可以做这样的事情。由于
对于像您这样的大型表中的实体添加属性,这种键值设置是一个好主意。
查询当然更复杂,但您可以创建视图来封装它们。 众所周知,这种方法既常见又稳健:WordPress使用它。 |
![]() |
hello_programmers · Mysql从其他表输出一列 1 年前 |
![]() |
Community wiki · 这个MySQL语句出了什么问题? 1 年前 |
![]() |
Community wiki · 优化从同一表中提取的多列的查询 1 年前 |
![]() |
Popo · Sql查询:返回数据库中不可用的where条件 1 年前 |
|
Hamdan Nuramdani · 对账单中一周内不同表中的数据求和 1 年前 |
|
Kugelfisch · 用php为数据库加密数据 1 年前 |