我应该将经常更新的列分开吗?

8 mysql index database-design

我有一个users包含用户信息的表和一个credits经常更新的列。

  • 在索引页面上,我显示了具有基本用户信息的用户列表,但我不需要积分。

  • 在详细信息页面上,我还显示了用户信息的积分。

两个主要操作在项目中密集。第一个操作是SELECT对索引页的操作。第二个操作是UPDATE对 credits 列的操作。credits列没有被索引,但由于它经常更新,它会影响表上的索引列users吗?如果是这样,我认为我应该将credits列作为表分开,并仅在需要时才加入。这样做,我可以提高SELECT索引页的性能吗?

另外,我正在使用 MySQL。对于经常更新的列,我应该使用什么样的表结构?

小智 13

看来您想要的是对“索引”页面上的查询进行所谓的仅索引扫描。这意味着您拥有在用于此查询的索引中的索引页上选择的所有数据(列)。这使得在执行此查询时不必去表。

例子:

SELECT name, basic, information
  from users
 where filter = something 
Run Code Online (Sandbox Code Playgroud)

(我只是假设您正在使用一些过滤器)。

如果创建以下索引:

 ALTER table users add index (filter, name, basic, information);
Run Code Online (Sandbox Code Playgroud)

MySQL 可以在不实际从表中读取任何内容的情况下执行上述查询(只是索引——因此,仅索引扫描)。换句话说,表中的列数不会影响此查询的性能。

您可以通过执行计划(解释)的额外列中“使用索引”的存在来识别仅索引扫描。

如果更新不属于此索引的列,则不需要更新索引。

一些链接到我的网站http://use-the-index-luke.com/