cDLEON
Онанист РНРСlub
Оптимизация селекта.
[sql]
CREATE TABLE `antiLeech_partnerPayments` (
`kid` bigint(20) NOT NULL,
`pid` int(11) NOT NULL,
`type` int(2) NOT NULL,
`summ` decimal(10,2) NOT NULL,
`aType` int(2) default NULL,
`aValue` decimal(10,2) default NULL,
`psumm` decimal(10,2) NOT NULL,
`paided` int(1) NOT NULL,
`time` int(11) NOT NULL,
KEY `pid` (`pid`,`time`),
KEY `kid` (`kid`),
KEY `pid_2` (`pid`),
KEY `paided` (`paided`,`pid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
[/sql]
[sql]SELECT p.id, p.login, p.lastPaidTime, p.paided, sum( pay.psumm ) as psumm , max( pay.`time` ) as lasttime
FROM antiLeech_partners AS p, antiLeech_partnerPayments AS pay
WHERE p.id >0
AND pay.paided =0
AND pay.pid = p.id
GROUP BY pay.pid
LIMIT 0,15
[/sql]
Вторую таблицу сбрасывать не стал, т.к. там селект идёт по примаку.
Вот решил потестить запросы...40 партнёров, у каждого по 10 000 "платежей". Запрос выполняется довольно долго (4.5 сек), за счёт того, что селект проходит 399 997 записей, хотя по логике вещей, он должен был взять только 15*10 000. Что я делаю не так? Как оптимизировать?
ЗЫ. поиск идёт по индексу paided.
[sql]
CREATE TABLE `antiLeech_partnerPayments` (
`kid` bigint(20) NOT NULL,
`pid` int(11) NOT NULL,
`type` int(2) NOT NULL,
`summ` decimal(10,2) NOT NULL,
`aType` int(2) default NULL,
`aValue` decimal(10,2) default NULL,
`psumm` decimal(10,2) NOT NULL,
`paided` int(1) NOT NULL,
`time` int(11) NOT NULL,
KEY `pid` (`pid`,`time`),
KEY `kid` (`kid`),
KEY `pid_2` (`pid`),
KEY `paided` (`paided`,`pid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
[/sql]
[sql]SELECT p.id, p.login, p.lastPaidTime, p.paided, sum( pay.psumm ) as psumm , max( pay.`time` ) as lasttime
FROM antiLeech_partners AS p, antiLeech_partnerPayments AS pay
WHERE p.id >0
AND pay.paided =0
AND pay.pid = p.id
GROUP BY pay.pid
LIMIT 0,15
[/sql]
Вторую таблицу сбрасывать не стал, т.к. там селект идёт по примаку.
Вот решил потестить запросы...40 партнёров, у каждого по 10 000 "платежей". Запрос выполняется довольно долго (4.5 сек), за счёт того, что селект проходит 399 997 записей, хотя по логике вещей, он должен был взять только 15*10 000. Что я делаю не так? Как оптимизировать?
ЗЫ. поиск идёт по индексу paided.