index
关键字的含义是什么以及它所服务的功能是什么?我知道这是为了加快查询速度,但我不确定如何做到这一点。
何时选择要编制索引的列?
index
关键字使用情况的示例如下所示create table
查询:
CREATE TABLE `blog_comment`
(
`id` INTEGER NOT NULL AUTO_INCREMENT,
`blog_post_id` INTEGER,
`author` VARCHAR(255),
`email` VARCHAR(255),
`body` TEXT,
`created_at` DATETIME,
PRIMARY KEY (`id`),
INDEX `blog_comment_FI_1` (`blog_post_id`),
CONSTRAINT `blog_comment_FK_1`
FOREIGN KEY (`blog_post_id`)
REFERENCES `blog_post` (`id`)
)Type=MyISAM
答案 0 :(得分:40)
我建议您从How MySQL Uses Indexes阅读MySQL Reference Manual。它声明使用了索引......
WHERE
子句匹配的行。MIN()
或MAX()
值。数据库中的索引就像书中的索引一样。您可以更快地在书中找到所需内容,因为索引按字母顺序列出。 MySQL不是使用按字母顺序排列的列表,而是使用B-trees来组织索引,这样可以更快地实现其目的(但对人类来说需要更长的时间)。
使用更多索引意味着占用更多空间(以及维护索引的开销),因此只有在符合上述使用标准的列上使用索引才真正值得。
在您的示例中,id
和blog_post_id
列都使用索引(PRIMARY KEY
也是索引),以便应用程序可以更快地找到它们。在id
的情况下,这可能允许用户快速修改或删除评论,并且在blog_post_id
的情况下,应用程序可以快速查找给定帖子的所有评论。 / p>
您会注意到email
列没有索引。这意味着通过特定的电子邮件地址搜索所有博客帖子可能需要相当长的时间。如果您想要添加特定电子邮件地址的所有评论,那么添加索引也是有意义的。
答案 1 :(得分:4)
此关键字表示您要在列blog_post_id
上创建索引以及表。
这样的查询:
SELECT *
FROM blog_comment
WHERE blog_post_id = @id
将使用此索引搜索此字段并运行得更快。
此列上还有foreign key
。
当您决定删除博客帖子时,数据库将需要检查此表以查看没有孤立评论。该索引还将加快此检查,因此查询如
DELETE
FROM blog_post
WHERE ...
也会跑得更快。