我read但我仍然困惑什麼時候在MySQL中使用普通索引或唯一索引。我有一個存儲帖子和回覆(id,parentId)的表格。我爲parentId,userId和editorId設置了三個正常的索引。我應該在這裏使用唯一索引嗎?爲什麼?
- 使用獨特的索引在任何情況下都會給我帶來好處,我將通常運行以下類型的查詢?爲什麼?
我大部分的查詢將返回崗位及其對策:
SELECT * FROM posts WHERE id = @postId OR parentId = @postId ORDER BY postTypeId
有的時候我會添加一個連接來獲得用戶數據:
SELECT * FROM posts
JOIN users AS owner ON owner.id = posts.userId
LEFT JOIN users AS editor ON editor.id = posts.editorId
WHERE id = @postId OR parentId = @postId ORDER BY postTypeId
其他時候,我可能會要求用戶和他/她的帖子:
SELECT * FROM users
LEFT JOIN posts ON users.id = posts.userid
WHERE id = @userId
我的模式如下所示:
CREATE TABLE `posts` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`posttypeid` int(10) NOT NULL,
`parentid` int(10) DEFAULT NULL,
`body` text NOT NULL,
`userid` int(10) NOT NULL,
`editorid` int(10) NOT NULL,
`updatedat` datetime DEFAULT NULL,
`createdat` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `userId` (`userid`),
KEY `editorId` (`editorid`),
KEY `parentId` (`parentid`)
) ENGINE=InnoDB AUTO_INCREMENT=572 DEFAULT CHARSET=utf8
謝謝你的解釋。我認爲這是有道理的。爲什麼在我的場景中使用它呢?用戶可以對帖子有很多回復,所以userId,parentId會被複制,但是post.id不會。爲什麼使用它會有什麼意義? post.id不會總是唯一的嗎? – Mohamad 2011-06-01 18:09:57
我澄清了這兩種情況。 – Jerome 2011-06-01 18:49:15