







|
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,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
3551
|
|