什么是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
;
我建议你阅读MySQL如何使用索引从MySQL参考手册.它声明使用了索引......
WHERE
快速查找与子句匹配的行.
消除行的考虑.
在执行连接时从其他表中检索行.
查找特定索引列的值MIN()
或MAX()
值.
对表进行排序或分组(在某些条件下).
在不咨询数据行的情况下仅使用索引优化查询.
数据库中的索引就像书中的索引一样.您可以更快地在书中找到所需内容,因为索引按字母顺序列出.MySQL使用B树来组织其索引,而不是按字母顺序排列的列表,这样可以更快地实现其目的(但对人类来说需要更长的时间).
使用更多索引意味着占用更多空间(以及维护索引的开销),因此只有在满足上述使用标准的列上使用索引才真正值得.
在您的示例中,id
和blog_post_id
列都使用索引(PRIMARY KEY
也是索引),以便应用程序可以更快地找到它们.在这种情况下id
,很可能这允许用户快速修改或删除评论,并且在这种情况下blog_post_id
,应用程序可以快速找到给定帖子的所有评论.
您会注意到该email
列没有索引.这意味着通过特定的电子邮件地址搜索所有博客帖子可能需要相当长的时间.如果您想要添加特定电子邮件地址的所有评论,那么添加索引也是有意义的.