оптимизация индексов запросов многие-ко-многим - PullRequest
3 голосов
/ 18 ноября 2011

У меня есть запрос «многие ко многим», который я хотел бы оптимизировать, какие индексы я должен создать для него?

  SELECT (SELECT COUNT(post_id) 
            FROM posts 
           WHERE post_status = 1) as total,
         p.*,
         GROUP_CONCAT(t.tag_name) tagged
    FROM tags_relation tr  
    JOIN posts p ON p.post_id = tr.rel_post_id  
    JOIN tags t ON t.tag_id = tr.rel_tag_id
   WHERE p.post_status=1
GROUP BY p.post_id

ОБЪЯСНИТЬ

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   PRIMARY     p   ALL PRIMARY NULL    NULL    NULL        5   Using where; Using filesort

1 Ответ

3 голосов
/ 18 ноября 2011

Вы можете взглянуть на план выполнения запроса, используя оператор Explain.Это покажет вам, происходит ли полное сканирование таблицы или удалось найти индекс для извлечения данных.С этого момента вы можете оптимизировать дальше.

Редактировать

На основании вашего плана выполнения запроса, на первом этапе оптимизации проверьте, что в ваших таблицах определен первичный ключ, и вы можете установитьиндекс по столбцам post_status и tag_name.

...