在非唯一索引中拥有多个列有什么好处?

What is the benefit to having more than one column in a non-unique index?

我读过this关于拥有多个索引的类似问题,但给出的答案非常简短,没有提供太多细节。

我有两个数据库 tables.

INVENTORY
| pKey | colName1 | colName2 | ... | colName70 |

HISTORY
| id | pKey | fieldName | oldValue | newValue |

历史记录table是库存中每个项目的变化记录。

当 history table 查询时,有时会使用 pKey,其他时候可以执行搜索以搜索 fieldName = "colName4" 的行。

我有历史 table 由 pKey 索引(非唯一且单独)并由 fieldName 索引(非唯一且单独),但我想知道将其索引是否有好处pKey 和 fieldName 以及非唯一索引?

在非唯一索引中拥有多个列有什么好处,它是如何工作的?

包含一组唯一列的任何一组列都是唯一的。

因此,某些唯一列加上其他列的索引同样是唯一的。所以这不是 "non-unique index" 的情况。仍然有1:1行对应。

这种索引的好处与多列上的任何索引相同。例如排序访问、内存中访问等

正如 Gordon Linoff 评论的那样:“MySQL documentation does a good job of explaining multi-complex indexes”和 "They basically work the same."(实际上该部分在 "Multiple-Column Indexes"。)

在关系理论中,"candidate key" (CK)(可以选择其中一个作为主键)是一个唯一集,不包含更小的唯一集。这就是人们在规范化中使用的东西。 CK 的任何超集(包括其自身)都是 "superkey"。并且 "foreign key" (FK) 由列 matching/referencing 一些 CK 组成。但是在SQLUNIQUE NOT NULL中声明了一个superkey,因为它可以包含一个更小的集合UNIQUE NOT NULL。其中一个可以写成 PRIMARY KEY,它也只是一个超级键。 FOREIGN KEY 实际上声明了一个外键。