MYSQL将花费很长时间来读取数据库


MYSQL will it take long to read through a database?

假设我的数据库中有一个名为comments的表。每个评论都有一个id、一个分配的帖子及其数据(用户提交的实际文本)。假设我有10,000个帖子,每个帖子有10个评论。总共有10万条评论。如果用户加载了一篇文章及其评论。

我用来加载评论的代码是否会读取所有十万条评论,以挑选出postd为(假设:)11的评论,或者它是否能够立即看到有10条评论的postd为11并将它们挑选出来(这将比查看100,000条评论快得多)。MySql在这种情况下做什么?

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

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条注释将来自一个块(或可能非常少的块),从而尽可能高效。

既然你的下一个问题是关于找到"下"10条评论,我就跳过了。推荐阅读:This。"记住您在前10条评论中离开的地方,然后将0更改为找到的最后一个comment_id

我给了你很多关键词去研究和理解。