Как я могу улучшить этот MySQL запрос на производительность - PullRequest
2 голосов
/ 26 марта 2012

У меня медленный запрос в php для большой таблицы MyISAM mysql:

select p.*, m.*, d.* 
from datafeeds as d, 
     products as p left outer join meta as m on p.mykey = m.mykey 
where p.datafeed_id = d.id and "keyword"

Таблица содержит 3 миллиона записей, и в некоторых случаях этот поисковый запрос занимает до 50 секунд.

Я был бы более чем благодарен за подсказку по оптимизации запроса и / или таблицы и индексов.

datafeed_id имеет индекс BTREE mykey_index имеет индекс BTREE

Я попробовал EXPLAIN EXTENDED:

ОБЪЯСНИТЬ РАСШИРЕННЫЙ ВЫБОР с.* м*, д.* ОТ каналов данных КАК d, продукты КАК ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ МЕТАСМ ВКЛ p.mykey = m.mykey ГДЕ p.datafeed_id = d.id И "ключевое слово"

id |select_type |стол |тип |возможные_ключи |ключ |key_len |ref |строки |Extra 1 |ПРОСТО |NULL |NULL |NULL |NULL |NULL |NULL |NULL |Невозможно ГДЕ

1 Ответ

1 голос
/ 27 марта 2012

убедитесь, что p.datafeed_id и m.mykey проиндексированы.Также было бы полезно узнать, что содержится в $name_clause.Вы также можете взглянуть на EXPLAIN в MySQL, так как это поможет вам сузить, какие индексы используются в данных инструкциях SELECT.

http://dev.mysql.com/doc/refman/5.0/en/explain.html

опубликовать результат для лучшего ответа.

...