Всё будет на мускуле, так что:
CREATE TABLE `routes`
( `route_id` int(11) NOT NULL,
`p1` int(11) NOT NULL,
`p1` int(11) NOT NULL,
`ordr` int(11) NOT NULL,
KEY `p1p2` (`p1`,`p2`) )
ENGINE=InnoDB;
---
Тестовых данных напихал около 340000 записей (т.е. 18000 путей по 20 точек), но довольно однообразно. Поскольку инетересующий путь берётся не из базы, то запрос выглядит так:
select route_id, count(route_id) weight
from routes
where p1 IN (x1, x2, ...)
AND p2 IN (x2, x3, ...)
group by route_id
order by weight DESC;
---
Выполняется в районе 1,5 секунд. Но это на виртуальной машине. И сильно зависит от количества путей, которые имеют хотя бы одну общую точку. Если общая точка только одна, то 15 мс.
В общем, я думаю, всё нормально. Спасибо.
|