我已经阅读了this关于有多个索引的类似问题,但给出的答案很短,并没有提供太多细节。
我有两个数据库表。
INVENTORY
| pKey | colName1 | colName2 | ... | colName70 |
HISTORY
| id | pKey | fieldName | oldValue | newValue |
历史记录表是清单中每个项目的更改记录。
当历史表是查询时,有时会使用pKey,有时可以执行搜索,搜索fieldName =“colName4”的行。
我有由pKey索引的历史表(非唯一且自身)并由fieldName索引(非唯一且本身),但我想知道是否有利用pKey和fieldName将它与索引一起索引非唯一索引?
在非唯一索引中拥有多个列有什么好处?它是如何工作的?
答案 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
实际上声明了一个外国超级密钥。