是否有任何方法可以以更优化的方式执行此查询?
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。产品约有400000排。products_categories大约是600000。类别为87的产品约为18000。使用解释给出:
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的第一行似乎不是一个很好的标志。因此,可以以任何方式优化这个查询吗?
发布于 2014-01-26 03:44:21
您需要对products_categories.categories_id进行索引,以便对WHERE子句进行优化。
发布于 2014-01-26 04:09:21
如果您删除了products表,该怎么办:
select SQL_NO_CACHE count(*)
from products_categories` `pc`
where pc.categories_id = 87;为此,您需要products_categories(categories_id)上的索引,或者类似的索引,其中categories_id是第一列。
发布于 2014-01-26 03:45:31
你可以试试这个。
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另外,检查索引的基数,我们已经发现基数不正常的情况,我们需要分析表以使我们的执行计划恢复正常。
https://stackoverflow.com/questions/21359350
复制相似问题