【问题标题】:Does number of columns affect MYSQL speed?列数会影响 MYSQL 速度吗?
【发布时间】:2010-12-24 22:08:16
【问题描述】:

我有一张桌子。我只需要运行一种类型的查询:在第 1 列中查找给定的唯一值,然后获取前 3 列。

现在,如果我在表中添加额外的几列以基本上是“数据存储”,对速度的影响有多大。我知道我应该使用一个单独的表,但假设我被限制为只有 1 个表,所以唯一的方法是在最后添加一些列。

所以,如果我添加一些列,比如最后 10 个,每个 30 个 varchar,这会减慢第一句中给出的任何查询吗?如果是这样,您认为与没有额外冗余的现有列相比有多大影响?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    是的,额外的数据会减慢查询速度,因为这意味着页面可以容纳更少的行,这意味着读取特定数量的行需要更多的磁盘访问,而内存中可以缓存的行更少。

    减速的确切因素很难预测。它可以忽略不计,但如果您接近能否将整个表缓存在内存中的界限,那么一些额外的列可能会对执行速度产生很大影响。从内存中的缓存或磁盘中获取行所需的时间相差几个数量级。

    如果添加covering index,则额外列的影响应该较小,因为查询可以使用相对较窄的索引,而无需参考较宽的主表。

    【讨论】:

    • 嗨,关于你的回答和原文:我只需要运行一种类型的查询:在第 1 列(主键列)中找到给定的唯一值,然后说第一个3列。由于第 1 列是我表中的主唯一键,这是否意味着 MYSQL 仅缓存 1 行,因此唯一的减速将是由于必须仅读取该 1 行的额外部分而导致的?还是我缺少什么?
    【解决方案2】:

    我不明白“我知道我应该使用单独的表格”这一点。您所描述的是您拥有数据库的原因,将密钥与一些相关数据相关联。换个角度看,如果没有钥匙,你还怎么找回这些信息?

    要回答您的问题,了解性能影响的唯一方法是经验测试(尽管在我之前发布的 Mark 的回答是提高速度的众多因素之一)。

    【讨论】:

    • 测试需要大量时间来创建一个测试数据库(至少 1 天)然后处理它......所以我只是希望有人可以猜测......
    【解决方案3】:

    这在一定程度上取决于您在记录中已有多少数据。差异通常在几乎没有到没有那么大之间。

    区别在于必须从磁盘加载多少数据才能获取数据。额外的列可能意味着每页中有更少的记录空间,但有可能每页中恰好有足够的空间容纳大多数额外数据,因此需要的额外块很少。这取决于当前数据在页面中的排列情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-22
      • 2013-01-23
      • 2019-09-18
      • 1970-01-01
      相关资源
      最近更新 更多