开发者

Why is my MySQL query so slow?

开发者 https://www.devze.com 2023-01-04 16:48 出处:网络
Background: entities tables currently开发者_运维知识库 has 14,111 records articles table currently has 5211 records
Background:
entities tables currently开发者_运维知识库 has 14,111 records
articles table currently has 5211 records

I am trying to find all articles that are active (completed) and have the entity 'google'

# Finding articles that have the entity google takes:
# 4 ms
SELECT `Article`.`id` FROM `articles_entities` AS `ArticlesEntity`
LEFT JOIN `entities` AS `Entity` ON (`ArticlesEntity`.`entity_id` = `Entity`.`id`)
WHERE `Entity`.`strict` = 'google'

# Finding articles that have the entity google and is active takes:
# 1800 ms
SELECT `Article`.`id` FROM `articles_entities` AS `ArticlesEntity` 
LEFT JOIN `entities` AS `Entity` ON (`ArticlesEntity`.`entity_id` = `Entity`.`id`)
LEFT JOIN `articles` AS `Article` ON (`ArticlesEntity`.`article_id` = `Article`.`id`)
WHERE `Entity`.`strict` = 'google' AND `Article`.`state` = 'completed'

What might be the issue with the query taking so long?

I would add that both fields in the pivot table are indexed.

Thanks in advance for you help

UPDATE

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE Entity ref PRIMARY,strict strict 767 const 1 Using where
1 SIMPLE ArticlesEntity ref article_id,entity_id,article_id_2 entity_id 108 b2b.Entity.id 4  
1 SIMPLE Article eq_ref PRIMARY,state PRIMARY 108 b2b.ArticlesEntity.article_id 1 Using where


Entity.strict or Article.state are not indexed. Use EXPLAIN before your SELECT statement and check which tables are being fully scanned. That will hint what needs indexing.


do you really need the left join?! imho your query should get a boost without it ;)

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号