MYSQL需要很长时间才能读取数据库吗?

时间:2016-11-15 18:12:38

标签: php mysql performance

我们说我的数据库中有一个名为comments的表。每个评论都有一个id,一个指定的帖子及其数据(用户提交的实际文本。)假设我有10,000个帖子,每个帖子有10条评论。这总共有100,000条评论。如果用户加载帖子及其评论。

我用来加载评论的代码是否会通过所有十万条评论来读取一条带有postID(或者说:)的11,或者它会立即看到有10条评论postID为11的注释并将它们删除(这比查看100,000条注释要快得多。在这种情况下,MySql做了什么?

1 个答案:

答案 0 :(得分:0)

我建议在表定义中使用以下内容(以及其他列):

post_id INT UNSIGNED NOT NULL,  -- for JOINing to Posts table
comment_id INT UNSIGNED AUTO_INCREMENT NOT NULL,
PRIMARY KEY(post_id, comment_id),  -- clusters all the comments together for a post
INDEX(comment_id)  -- keeps AUTO_INCREMENT happy

并使用ENGINE=InnoDB,以便PRIMARY KEY与数据集群。

SELECT ... 
    WHERE post_id = 123
      AND comment_id > 0   -- see note below
    ORDER BY comment_id ASC
    LIMIT 10

这样,所有10个注释都来自一个块(或者可能是非常少量的块),从而尽可能高效。

因为您的下一个问题是关于找到' next' 10条评论,我已经跳了过来。推荐阅读:This。 "请记住前10个评论的中断位置,然后将0更改为找到的最后一个comment_id

我给了你很多关键词来研究和理解。在回到下一个问题之前,请先阅读手册。