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




MySQL.RU - Webboard



Вернуться
Долго выполняется запрос (Миелофон) 05/07/2002 - 09:16:32
      Re: Долго выполняется запрос (ворон) 05/07/2002 - 10:24:36
      Re: Долго выполняется запрос (Mielofon) 05/07/2002 - 12:24:06
      Re: Долго выполняется запрос (Flagman) 05/07/2002 - 15:10:59
      Re: Долго выполняется запрос (Flagman) 05/07/2002 - 15:12:56
      Re: Долго выполняется запрос (WARHAMMER) 05/07/2002 - 16:06:05
      Re: И еще... (WARHAMMER) 05/07/2002 - 16:12:32



From: Миелофон - 05/07/2002 - 09:16:32
Subject:Долго выполняется запрос
-----------------
Значит проблема в следующем
Имеем 3 таблицы:
1. iptrafficlocal - трафик, большая (300Мег) содержит поля ipfrom1, ipfrom2, ipfrom3, ipfrom4, SizeTo
2. ips - описания IP, маленькая (записей 20) ip1, ip2, ip3, ip4, iptype, name, email
3. iptypes - группы IP, маленькая (записей 4) iptype, bg

Теперь мне надо сделать выборку по трафику для каждого IP за месяц:

SELECT `iptrafficlocal`.`ipfrom1`,
`iptrafficlocal`.`ipfrom2`,
`iptrafficlocal`.`ipfrom3`,
`iptrafficlocal`.`ipfrom4`,
SUM( `iptrafficlocal`.`SizeTo`, ) AS SUM_OF_SIZETO
FROM `iptrafficlocal`
WHERE
(
(DATE BETWEEN '2002-05-01' and '2002-05-31')
)
GROUP BY `iptrafficlocal`.`ipfrom1`, `iptrafficlocal`.`ipfrom2`, `iptrafficlocal`.`ipfrom3`, `iptrafficlocal`.`ipfrom4`

данный запрос выполняется 25 секунд


Попытка в результирующем запросе получить информацию из таблицы ips:

SELECT `ips`.`iptype`,
`ips`.`name`,
`ips`.`email`,
`iptrafficlocal`.`ipfrom1`,
`iptrafficlocal`.`ipfrom2`,
`iptrafficlocal`.`ipfrom3`,
`iptrafficlocal`.`ipfrom4`,
SUM( `iptrafficlocal`.`SizeTo`) AS SUM_OF_SIZETO
FROM `ips`
LEFT OUTER JOIN `iptrafficlocal` ON (`iptrafficlocal`.`ipfrom1` = `ips`.`ip1`) AND (`iptrafficlocal`.`ipfrom2` = `ips`.`ip2`) AND (`iptrafficlocal`.`ipfrom3` = `ips`.`ip3`) AND (`iptrafficlocal`.`ipfrom4` = `ips`.`ip4`)
WHERE
(
(DATE BETWEEN '2002-05-01' and '2002-05-31')
)
GROUP BY `ips`.`iptype`, `ips`.`name`, `ips`.`email`, `iptrafficlocal`.`ipfrom1`, `iptrafficlocal`.`ipfrom2`, `iptrafficlocal`.`ipfrom3`, `iptrafficlocal`.`ipfrom4`

уже увеличивает время запроса так, что мы не дождались его выполнения.
Так же как и запрос:

SELECT `iptypes`.`bg`,
`ips`.`iptype`,
`ips`.`name`,
`ips`.`email`,
`iptrafficlocal`.`ipfrom1`,
`iptrafficlocal`.`ipfrom2`,
`iptrafficlocal`.`ipfrom3`,
`iptrafficlocal`.`ipfrom4`,
SUM( `iptrafficlocal`.`SizeTo`, ) AS SUM_OF_SIZETO
FROM `iptrafficlocal`
LEFT OUTER JOIN `ips` ON (`iptrafficlocal`.`ipfrom1` = `ips`.`ip1`) AND (`iptrafficlocal`.`ipfrom2` = `ips`.`ip2`) AND (`iptrafficlocal`.`ipfrom3` = `ips`.`ip3`) AND (`iptrafficlocal`.`ipfrom4` = `ips`.`ip4`)
LEFT OUTER JOIN `iptypes` ON (`ips`.`iptype` = `iptypes`.`iptype`)
WHERE
(
(DATE BETWEEN '2002-05-01' and '2002-05-31')
)
GROUP BY `iptypes`.`bg`, `ips`.`iptype`, `ips`.`name`, `ips`.`email`, `iptrafficlocal`.`ipfrom1`, `iptrafficlocal`.`ipfrom2`, `iptrafficlocal`.`ipfrom3`, `iptrafficlocal`.`ipfrom4`

А именно это я и хотел получить.

Что не так? Может нужно индексы сделать? Настройки MySQL?
Я так понял что в моем случае легче первым запросом делать выборку во временную таблицу и дальше уже работать с ней, но это же не правильно.



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

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

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



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