簡體   English   中英

優化 mysql 查詢以減少搜索行

[英]optimise a mysql query to reduce rows searched

我目前正在抓取我網站上發布的最后 5 條評論,我認為我似乎做得很糟糕。

這是 SQL 查詢:

SELECT c.comment_id
     , c.article_id
     , c.time_posted
     , a.title
     , a.slug
     , u.username
  FROM articles_comments c 
  JOIN articles a 
    ON c.article_id = a.article_id 
  JOIN users u 
    ON u.user_id = c.author_id 
 WHERE a.active = 1 
   AND c.approved = 1 
 ORDER 
    BY c.comment_id DESC 
 LIMIT 5 

我的問題是,必須搜索很多行,這似乎很浪費。 我很好奇是否有更好的方法來做到這一點。

這是 output 的解釋: 在此處輸入圖像描述

如您所見,它給出的行數是 81,486,這看起來有點搞笑。 我在這里想念什么?

確保你有正確的索引

  table articles_comments (approved, article_id, author_id )
  table articles (active, article_id)
  table users (user_id )   

結果,只是強制articles_comments 使用PRIMARY 鍵(comment_id)作為索引修復它。

問題是我的排序選擇了所有已批准的評論,因此它使用已批准的列進行排序,導致它從數以萬計的數據中挑選數據。

c:  INDEX(approved, comment_id)  -- in this order
a:  I assume you have PRIMARY KEY(article_id)
u:  I assume you have PRIMARY KEY(user_id)

希望c索引將處理一些WHERE以及ORDER BYLIMIT 最壞的情況是它必須掃描整個表而不找到 5 行。

81,486 是假的。 這是獲取良好信息的精確方法:

FLUSH STATUS;
SELECT ...;
SHOW SESSION STATUS LIKE 'Handler%';

“讀取”將指示有多少行數據和索引被觸及; 寫入指示正在使用臨時表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM