2011-11-18 3 views
3

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

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 

EXPLAIN

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 

ответ

3

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

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

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

+0

+1: Довольно много проб и ошибок, и это зависит от данных, и как это получить доступ ... –

+0

вот результат PRIMARY, post_status \t \t post_status 1 \t \t Const 4 \t Используя где; Использование filesort – dsportesa

+0

Теперь ваш запрос имеет post_status в качестве ключа, в отличие от предыдущего плана выполнения, который был NULL. –

Смежные вопросы