Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Гуру, помогите оптимизировать запрос. (Lectar) 06/10/2006 - 10:07:04
      Re: Гуру, помогите оптимизировать запрос. (Gennadiy) 07/11/2006 - 08:57:30

> Original message text:
> From: Lectar - 06/10/2006 - 10:07:04
> Subject:Гуру, помогите оптимизировать запрос.
> -----------------
> при исполнении нижеприведенного запроса процесс mysqld-nt занимает 50% ресусов процессора, и выполняется примерно 1 минуту.
> Возможно ли его оптимизировать для более быстрого выполнения?
>
> Структура БД в фале: http://www.rapidshare.ru/61396
>
> запрос:
>
> select count(atc.id) as dat,sec_to_time(sum(time_to_sec(atc.duration))) as start_time,users.extention as name, customer.organisation as internal,customer.city as external_in ,users.name as duration from atc left join tel on if (atc.external_in is not NULL,IF (atc.external_out regexp '^8812336370',atc.external_in=tel.number,if (atc.external_out is null,atc.external_in=tel.number,atc.external_out=tel.number)),atc.external_out=tel.number) left join customer on tel.cust_id=customer.id left join users on users.extention=atc.internal where atc.dat>='2006-9-25'&&atc.dat<='2006-10-4' group by customer.id
>
>


From: Gennadiy - 07/11/2006 - 08:57:30
Subject:Гуру, помогите оптимизировать запрос.
-----------------
Думаю, здесь дело в первом объединении, где 'left join tel on if()'. Дело в том, что здесь нет (и быть не может) индексов, т.к. выполняется запрос на объединение с вычисляемым полем.
Можно попробовать решить проблему через разбиение оператора сложного select на два: первое - создание временной таблицы, куда поместить результаты if(), с индексом на этом поле. И второе - select join...
Ну и есть команда EXPLAIN, там все написано...


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
30027



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |