2015-07-28 5 views
-1

Может ли кто-нибудь настроить этот запрос для лучшей производительности?Как я могу оптимизировать этот следующий запрос mysql

 
SELECT `Vocabulary`.`id`, 
`Vocabulary`.`title`, 
`Vocabulary`.`alias`, 
`Vocabulary`.`description`, 
`Vocabulary`.`required`, 
`Vocabulary`.`multiple`, 
`Vocabulary`.`tags`, 
`Vocabulary`.`plugin`, 
`Vocabulary`.`weight`, 
`Vocabulary`.`updated`, 
`Vocabulary`.`created`, 
`TypesVocabulary`.`id`, 
`TypesVocabulary`.`type_id`, 
`TypesVocabulary`.`vocabulary_id`, 
`TypesVocabulary`.`weight` 
FROM `epowerg`.`vocabularies` AS `Vocabulary` 
JOIN `epowerg`.`types_vocabularies` AS `TypesVocabulary` 
ON (`TypesVocabulary`.`type_id` IN (1, 2, 4) 
AND `TypesVocabulary`.`vocabulary_id` = `Vocabulary`.`id`)  
ORDER BY `Vocabulary`.`weight` ASC; 

Результат генерируется из запроса:

 
+----+-------------+-----------------+------+---------------+------+---------+------+------+---------------------------------+ 
| id | select_type | table   | type | possible_keys | key | key_len | ref | rows | Extra       | 
+----+-------------+-----------------+------+---------------+------+---------+------+------+---------------------------------+ 
| 1 | SIMPLE  | Vocabulary  | ALL | PRIMARY  | NULL | NULL | NULL | 2 | Using temporary; Using filesort | 
| 1 | SIMPLE  | TypesVocabulary | ALL | NULL   | NULL | NULL | NULL | 4 | Using where; Using join buffer | 
+----+-------------+-----------------+------+---------------+------+---------+------+------+---------------------------------+ 

Заранее спасибо Прабхакаран. R

+0

Оптимизация каким образом ?, у вас есть соображения производительности? –

+0

Добавить индекс в 'type_id' – Jens

+0

Почему, по вашему мнению, он нуждается в настройке? Все хорошо. – tolanj

ответ

3

Вот структура вашего запроса:

select v.*, tv.* 
from `epowerg`.`vocabularies` v JOIN 
    `epowerg`.`types_vocabularies` tv 
    ON tv.type_id IN (1, 2, 4) AND  
     tv.vocabulary_id = v.id  
ORDER BY v.weight ASC; 

Есть два основных возможные планы выполнения для этого запроса: чтение v первых и поиск значения в tv. Или прочитайте tv и просмотрите значения в v.

Во-первых, вы хотите индексы на vocabularies(weight, id) и types_vocabularies(vocabulary_id, type_id). Если это сработает, то это устранит сортировку.

Второй подход к попытке - сначала фильтровать типы. Показатели для этого: types_vocabularies(type_id, vocabulary_id) и vocabularies(id).

Какой метод лучше зависит от характера ваших данных. Но сначала попробуйте сначала, потому что устранение сортировки часто является хорошей идеей.

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