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

时间:2015-03-06 15:20:37

标签: mysql database database-design

我已经阅读了this关于有多个索引的类似问题,但给出的答案很短,并没有提供太多细节。

我有两个数据库表。

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

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

历史记录表是清单中每个项目的更改记录。

当历史表是查询时,有时会使用pKey,有时可以执行搜索,搜索fieldName =“colName4”的行。

我有由pKey索引的历史表(非唯一且自身)并由fieldName索引(非唯一且本身),但我想知道是否有利用pKey和fieldName将它与索引一起索引非唯一索引?

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

1 个答案:

答案 0 :(得分:1)

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

因此,对某些唯一列和其他列的索引也是唯一的。所以这不是“非唯一索引”的情况。与行的对应关系仍然是1:1。

此类索引的好处与多列上的任何索引相同。例如排序访问,内存访问等

正如戈登·林诺夫评论的那样:“MySQL documentation does a good job of explaining multi-complex indexes”和“他们基本上是一样的。” (事实上​​,该部分是关于“多列索引”。)

在关系理论中,“候选键”(CK)(其中一个可以被选为主键)是一个不包含较小唯一集的唯一集。这就是人们在规范化中的用法。 CK的任何超集(包括其自身)都是“超级钥匙”。并且“外键”(FK)由匹配/引用一些CK的列形成。但是在SQL UNIQUE NOT NULL中声明了一个超级键,因为它可以包含一个较小的集合UNIQUE NOT NULL。其中一个可以写成PRIMARY KEY,这也只是一个超级钥匙。并且FOREIGN KEY实际上声明了一个外国超级密钥。