3

我正在创建一个包含四列的 Innodb 表。

桌子

 column_a (tiny_int)
 column_b (medium_int)
 column_c (timestamp)
 column_d (medium_int)

 Primary Key -> column_a, column_b, column_c

从逻辑的角度来看,A、B、C 列必须一起组成一个 PK。但是,为了提高性能并能够直接从索引中读取(使用索引),我正在考虑一个包含所有 4 列的 PK(A , B, C, D)。

问题

将附加列附加到 Innodb 表上的主键的性能是什么?

注意事项

  • 代理主键绝对不可能
  • 此表上不存在其他索引
  • 表是读/写密集型(两者大致相等)

谢谢!

4

2 回答 2

1

在 InnoDB 中,PRIMARY KEY索引结构包括所有非键字段,并且会自动使用它们来覆盖索引查询和行消除。PRIMARY KEY除了索引结构之外,没有单独的“数据”结构。无需向PRIMARY KEY定义本身添加其他字段。Using index请注意,当它在 InnoDB 表上使用时它不会显示PRIMARY KEY,因为它是不同的代码路径,不会触发添加该消息。

于 2013-01-08T16:47:58.947 回答
0

A few things to consider:

  1. Unless the query in question uses all of the columns in the index, the index will not be used.
  2. As jeremycole notes: in the Innodb structure all row data is stored in the B-tree leaf nodes of the clustered index (PRIMARY INDEX)

This concept is covered: http://www.innodb.com/wp/wp-content/uploads/2009/05/innodb-file-formats-and-source-code-structure.pdf http://blog.johnjosephbachir.org/2006/10/22/everything-you-need-to-know-about-designing-mysql-innodb-primary-keys/

... and in jeremy's blog post here: http://blog.jcole.us/2013/01/07/the-physical-structure-of-innodb-index-pages/

As such, a query on A, B, C will be sufficient for efficiently obtaining all values on this Innodb table.

于 2013-01-03T20:06:21.647 回答