2016-11-15 104 views
0

假設我在我的數據庫中有一個名爲comments的表。每條評論都有一個ID,一個指定的帖子及其數據(用戶提交的實際文本)。假設我有10,000個帖子,每個帖子有10個評論。這總共有10萬條評論。如果用戶加載帖子及其評論。MYSQL需要很長時間才能讀取數據庫?

請問我用來加載評論的代碼是通過所有的十萬條評論來閱讀的,用postID(可以說是:) 11來挑選它,或者它會立即能夠看到有10條評論。11,並挑選出來(這比通過100000點意見看快了很多帖子ID是什麼的MySQL在這種情況下做

+5

如果它的索引正確,它將使用索引,而不是掃描所有記錄,如果它不是,那麼我會推薦搜索關於數據庫索引的信息 – doublesharp

+0

要獲得這個問題的答案,真棒傢伙誰維護MySQL創建的[EXPLAIN](http://dev.mysql.com/doc/refman/5.7/en/explain.html)。爲了避免理論和不使用,只需使用'EXPLAIN',你就可以得到你的答案你還沒有發佈你的表模式和查詢,它可能會掃描10萬行,它可能會減少 - 問一下。 –

回答

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條評論將來自一個區塊(或可能是非常少量的區塊),從而儘可能高效。

既然你的下一個問題是關於找到'下'的10個評論,我已經跳了起來。推薦閱讀:This。 「記住,你與第10條評論不放過,然後更改0到找到的最後一個comment_id

我已經給了你很多關鍵字的研究和了解。您的下一個問題,回來之前,請仔細閱讀手冊

相關問題