【发布时间】:2011-01-13 01:06:01
【问题描述】:
创建包含我的数据库结构的 mysql 转储时,其中一个表显示如下:
CREATE TABLE `completedTransactions` (
`paymentId` int(10) unsigned NOT NULL,
`timestamp` int(15) unsigned NOT NULL,
`actionTaken` varchar(25) NOT NULL,
`response` varchar(255) NOT NULL,
`responseCode` int(5) NOT NULL,
PRIMARY KEY (`paymentId`,`timestamp`),
KEY `paymentId` (`paymentId`),
主键是我所期待的,但我不确定最后一行是什么?
KEY `paymentId` (`paymentId`),
这与索引有关吗?
【问题讨论】:
-
我想知道为什么在这种情况下会在 paymentId 上创建一个附加索引,因为主键也应该是一个索引。所以,恕我直言,附加索引(键)已过时。
-
@Frederik:主键是复合键,因此它的索引将基于此。仅基于
paymentId进行搜索时,该索引可能没有用。 -
@Frederik Gheysels:由于
paymentId和timestamp都属于主键,因此会在这两个字段上创建索引。所以可以为paymentId创建一个额外的索引。 -
@T.J. Crowder:看起来主键的复合索引的顺序意味着
paymentId上的查询仍然可以有效地使用该索引,而不需要额外的索引。 -
@T.J.克劳德:我不同意。由于 paymentId 是复合主键中的第一列,因此当您仅搜索 paymentId 时仍会使用该索引。添加一个关于时间戳的额外查询(如果有对该列进行过滤的查询)会更有益,因为在搜索时间戳时,无法使用 PK 上存在的索引。
标签: mysql primary-key key