оптимизация таблиц нужна помощь

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
Аватара пользователя
RusAlex
Сообщения: 324
Зарегистрирован: 2010.08.29, 15:30

оптимизация таблиц нужна помощь

Сообщение RusAlex »

Всем привет, первый раз оптимизирую базу. Начитался инфы по индексам. Залил в базу тестовых записей 100 тыщ. Не так много - но достаточно.
И CGridView выполняет вот такой запрос:

Код: Выделить всё

SELECT COUNT(DISTINCT `clients2`.`id`) FROM `clients2` `clients2` LEFT OUTER JOIN `users` `users` ON (`clients2`.`user_id`=`users`.`id`) AND (users.status!=5) WHERE (clients2.status!=5) 
Как я ни старался расставить индексы - все равно запрос этот выполняется на моём core i7 0.140503 секунды, стабильно.
Уже и не знаю что тут можно оптимизировать.

Кстати для тестовых записей использовал вот эту тулзу:
https://github.com/fzaninotto/Faker очень удобно.
Аватара пользователя
because
Сообщения: 689
Зарегистрирован: 2010.09.30, 22:01

Re: оптимизация таблиц нужна помощь

Сообщение because »

AND (users.status!=5) WHERE (clients2.status!=5) а это не идентичные условия, от условия в join нельзя избавиться ?
можно ведь и закэшировать этот результат на какое-то время
RTFM !
Аватара пользователя
RusAlex
Сообщения: 324
Зарегистрирован: 2010.08.29, 15:30

Re: оптимизация таблиц нужна помощь

Сообщение RusAlex »

условия разные, users и clients2 имеют поля status.

По поводу избавиться от условия - нет, это CGridView тут всегда будут условия
Аватара пользователя
because
Сообщения: 689
Зарегистрирован: 2010.09.30, 22:01

Re: оптимизация таблиц нужна помощь

Сообщение because »

у меня была аналогичная проблема с такими запросами, только join-в у меня было 2. в итоге после попыток оптимизаций, я пришел к выводу что считать большое число записей в сложном запросе накладно и нужно искать другие пути. ну или кэшировать.
RTFM !
Аватара пользователя
RusAlex
Сообщения: 324
Зарегистрирован: 2010.08.29, 15:30

Re: оптимизация таблиц нужна помощь

Сообщение RusAlex »

спасибо понятно.
Аватара пользователя
Svyatov
Сообщения: 459
Зарегистрирован: 2010.08.12, 14:50
Откуда: Санкт-Петербург
Контактная информация:

Re: оптимизация таблиц нужна помощь

Сообщение Svyatov »

RusAlex писал(а):Как я ни старался расставить индексы - все равно запрос этот выполняется на моём core i7 0.140503 секунды, стабильно.
Для 100К записей и такого запроса не такой уж и плохой результат вроде...
Аватара пользователя
RusAlex
Сообщения: 324
Зарегистрирован: 2010.08.29, 15:30

Re: оптимизация таблиц нужна помощь

Сообщение RusAlex »

ну придется закешировать. ничего страшного
Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: оптимизация таблиц нужна помощь

Сообщение timlar »

Выполни этот же запрос, только перед SELECT укажи EXPLAIN и покажи вывод.
Twitter: @timlar_ua
Nafania
Сообщения: 1227
Зарегистрирован: 2011.01.31, 13:12

Re: оптимизация таблиц нужна помощь

Сообщение Nafania »

Связь между таблицами какая?
DISTINCT негативная вещь.
Насколько я помню при использовании DISTINCT не работает query_cache к тому же.
Если есть возможность, то лучше заменить на COUNT(*) GROUP BY `clients2`.`id`
Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: оптимизация таблиц нужна помощь

Сообщение timlar »

Nafania писал(а):Если есть возможность, то лучше заменить на COUNT(*) GROUP BY `clients2`.`id`
И добавить ORDER BY NULL, чтобы при GROUP BY не было Using filesort.
Twitter: @timlar_ua
Аватара пользователя
xoma
Сообщения: 641
Зарегистрирован: 2009.04.02, 15:24
Откуда: Ногинск
Контактная информация:

Re: оптимизация таблиц нужна помощь

Сообщение xoma »

А в таблице "clients2" есть индекс по полю "user_id "? Cудя по картинке - идет полный перебор этой таблицы.

Или я что-то путаю ?
Nafania
Сообщения: 1227
Зарегистрирован: 2011.01.31, 13:12

Re: оптимизация таблиц нужна помощь

Сообщение Nafania »

xoma писал(а):А в таблице "clients2" есть индекс по полю "user_id "? Cудя по картинке - идет полный перебор этой таблицы.

Или я что-то путаю ?
Из-за DISCTINCT полный скан идет, есть там ключи или нет - это неважно.
Аватара пользователя
RusAlex
Сообщения: 324
Зарегистрирован: 2010.08.29, 15:30

Re: оптимизация таблиц нужна помощь

Сообщение RusAlex »

ребята, этот запрос формирует CGridView , вопрос решен, CGridView не будет использоваться для этой задачи
Barkov
Сообщения: 96
Зарегистрирован: 2011.10.08, 13:23
Откуда: Симферополь

Re: оптимизация таблиц нужна помощь

Сообщение Barkov »

Подскажите чем можно заменить CGridView? Есть ли этому альтернатива? И вообще существует ли возможность сформировать объект данных dataProvider средствами DAO, чтобы не использовать AR для емких запросов?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: оптимизация таблиц нужна помощь

Сообщение samdark »

Ну а заменить можно foreach-ем и табличкой.
Barkov
Сообщения: 96
Зарегистрирован: 2011.10.08, 13:23
Откуда: Симферополь

Re: оптимизация таблиц нужна помощь

Сообщение Barkov »

Sam спасибо за наводку то что надо!
Ответить