簡體   English   中英

優化mysql查詢:產品<-N:N->類別

[英]Optimize mysql query: products <- N:N -> categories

有什么方法可以以更優化的方式執行此查詢?

select SQL_NO_CACHE count(*) from products p
INNER JOIN `products_categories` AS `pc` ON p.id = pc.products_id
where pc.categories_id = 87

我的架構很簡單:產品,類別和N:N聯接表:products_categories。 產品約有40萬行。 products_categories大約為600000。category = 87的產品大約為18000。使用explain給出:

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE  pc  index   products_id products_id 8   NULL    612469  Using where; Using index
1   SIMPLE  p   eq_ref  PRIMARY PRIMARY 4   stagingbagthis.pc.products_id   1   Using index

在我看來,行= 612469的第一行並不是一個好兆頭。 那么,可以以任何可能的方式優化此查詢嗎?

如果刪除了products表怎么辦:

select SQL_NO_CACHE count(*)
from products_categories` `pc` 
where pc.categories_id = 87;

為此,您需要在products_categories(categories_id)上建立一個索引,或者類似的索引,其中categories_id是第一列。

您需要在products_categories.categories_id上建立索引,以便可以優化WHERE子句。

你可以試試看。

select SQL_NO_CACHE count(*) from products p
    INNER JOIN `products_categories` AS `pc` 
        ON p.id = pc.products_id and pc.categories_id = 87

還要檢查索引的基數,我們發現基數超出預期的情況,我們需要分析表以使執行計划恢復正常。

暫無
暫無

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

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