Время медленного выполнения статического метода ORM Кохана
У меня есть приложение Kohana 3.3, работающее на WAMP (PHP 5.4.3), которое использует статическую функцию для получения списка последних статей. Когда я загружаю страницу, время выполнения приложения (через Kohana Profiler) составляет 6,7 секунды. Когда я загружаю ту же страницу без вызова метода get_recent (пропуская пустой массив), время выполнения приложения составляет 0,3 секунды.
Это указывает на то, что этот статический метод вызывает проблему. Я запустил сырой MySQL, и это занимает 1,4 секунды.
Это код внутри метода:
$articles = self::factory('user_articles')
->join('articles', 'INNER')->on('user_articles.article_id', '=', 'articles.id')
->order_by('user_articles.created_at', 'ASC')
->limit(10)
->group_by('articles.id')->find_all();
Есть индекс на user_articles.article_id
и на articles.id
, Что еще я могу сделать, чтобы оптимизировать запрос или ускорить время выполнения?
2 ответа
Вы можете добавить индекс на created_at
проверить с сырым SQL, если это помогает или нет.
Также может быть хорошей идеей не использовать ORM и пытаться выполнить запрос DB Builder.
Попробуйте получить последний запрос по echo Database::instance()->last_query
и попробуйте MySQL EXPLAIN
, Он покажет вам, какие индексы используются.
PS: сколько строк у вас в articles
а также users
?