Как оптимизировать запрос

Вопросы и ответы по изменению функционала, смене дизайна, переносу сайта и т.п.

Модераторы: Xpycm, Koduc

Правила форума
ВНИМАНИЕ! Форум не является средством гарантированной поддержки клиентов и пользователей. Поэтому на быстрый ответ тут рассчитывать не нужно, как и на ответ вообще. Сотрудники отвечают по мере своих возможностей.

На форуме действует ограничение в 3 сообщения / сутки.
Если Вы хотите сказать "спасибо", то воспользуйтесь функцией "Повысить репутацию" - зелёная иконка "плюс" под ником ответившего.

Как оптимизировать запрос

Сообщение vanred79 » 14 окт 2017, 21:56

Здравствуйте! Подскажите пожалуйста возможно ли как то оптимизировать следующий запрос:
Код: Выделить всё
SELECT MAX(valFROM
                
(SELECT MAX(date_updated) as val FROM {{apartment}}
                
UNION
                SELECT date_updated 
as val FROM {{galleries}}) as t

Этот запрос на 100% загружает CPU VPS сервера. Можно ли что то с ним сделать?
Вся недвижимость Астаны у нас на сайте
vanred79
Местная знаменитость
Местная знаменитость
 
Сообщения: 660
Зарегистрирован: 02 фев 2013, 18:42
Откуда: Казахстан
Очки репутации: 2

Re: Как оптимизировать запрос

Сообщение Xpycm » 16 окт 2017, 09:08

Здравствуйте.

Попробуйте добавить индексы в обе таблицы для полей date_updated
Dropbox
Open Real Estate CMS: FAQ | FAQ 2 | FAQ 3
Изображение
Xpycm
Разработчик
Разработчик
 
Сообщения: 1592
Зарегистрирован: 30 дек 2011, 11:06
Откуда: Йошкар-Ола
Очки репутации: 50

Re: Как оптимизировать запрос

Сообщение vanred79 » 16 окт 2017, 09:42

Xpycm писал(а):Здравствуйте.

Попробуйте добавить индексы в обе таблицы для полей date_updated


Добрый день Хруст!
Индексы в полях date_updated стоят в обоих таблицах.

Я немного изменил код RandomapartmentsWidget
Код: Выделить всё
Yii::import('application.modules.apartments.helpers.apartmentsHelper');
$dependency = new CDbCacheDependency('SELECT MAX(id) FROM {{apartment}}');
        
$sql 'SELECT id FROM {{apartment}} WHERE type='.$type.' AND city_id='.$sity.' AND obj_type_id='.$tipob.' '.$num_of_rooms.' '.$price_type.' ';
        
$results Yii::app()->db->cache(param('cachingTime'1209600), $dependency)->createCommand($sql)->queryColumn();
                
shuffle($results);

        
$this->criteria = new CDbCriteria;
        
$this->criteria->addInCondition('t.id'array_slice($results0param('module_apartments_widgetApartmentsItemsPerPageRandom'9)));

        
$result apartmentsHelper::getApartments(param('module_apartments_widgetApartmentsItemsPerPageRandom'9), $this->usePagination0$this->criteria);
        
        if(
$this->count){
            
$result['count'] = $this->count;
        }

        
$this->render('widgetApartments_list'$result); 

где переменные после WHERE берутся из фильтра страниц page.
Все работает, но загрузка CPU 100%. show full processlist показывал, что грузит процессор процесс mysql
Код: Выделить всё
SELECT MAX(valFROM
                
(SELECT MAX(date_updated) as val FROM {{apartment}}
                
UNION
                SELECT date_updated 
as val FROM {{galleries}}) as t

Как думаете, может быть это из за того, что очень много страниц page в таблице ore_menu (порядка 50 тыс.)? Или из этого, что вышестоящий код не правильно сделал?
Вся недвижимость Астаны у нас на сайте
vanred79
Местная знаменитость
Местная знаменитость
 
Сообщения: 660
Зарегистрирован: 02 фев 2013, 18:42
Откуда: Казахстан
Очки репутации: 2


Вернуться в Вопросы и помощь по изменениям

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21

cron