Помогите решить задачку
Всем приветЕсть 1кк заказов, у заазов есть обычные параметры(длина, вес, объем и т.д) есть гео-параметры(откуда-куда)Надо - быстро найти подходящие заказы - как по фасетам так и по гео. Используется mysql 5.7. К сожалению одновременный поиск по bree & rtree не работает ( точнее работает очень медленно, т.к. выбирается выбирается только один из индексов). Вопрос - кто что может подсказать в этом направлении. Сфинкс, эластик? может у кого была похожая задача?UPD: Перефразирую вопрос в чем проблема, опустим доп условия (вес, габарит и прочее), проблема в геоНеобходимо выбрать заказы у которых пункт "откуда" входит в область "откуда" и пункт "куда" входит в область "куда"-----есть таблица `geo_polygons`id int...polygon MULTIPOLYGONиндекс на polygon SPATIAL----------Есть талблица `address`id int...location POINTиндекс на location SPATIAL-----ЗапросSELECT o.idFROM `orders` as oJOIN `address` AS ao ON `o`.`address_id_from` = `ao`.`id`JOIN `address` AS at ON `o`.`address_id_to` = `at`.`id`JOIN vvGeo.geo_polygons as pfJOIN vvGeo.geo_polygons as ptWHERE pf.id = 1 AND pt.id = 2 AND ST_Contains(pf.polygon, `ao`.`location`) AND ST_Contains(pt.polygon, `at`.`location`)LIMIT 30;план1 SIMPLE pf const PRIMARY,ix_polygon PRIMARY 4 const 1 100 1 SIMPLE pt const PRIMARY,ix_polygon PRIMARY 4 const 1 100 1 SIMPLE o range afrom,ato,address address 5 189044 50 Using where; Using index1 SIMPLE ao eq_ref PRIMARY,ix_location PRIMARY 4 vvUserBD.o.address_id_from 1 70.16 Using where1 SIMPLE at eq_ref PRIMARY,ix_location PRIMARY 4 vvUserBD.o.address_id_to 1 93.48 Using whereВремя выполнения:[2016-10-11 12:31:29] 30 rows retrieved starting from 1 in 2m 0s 547ms (execution: 2m 0s 544ms, fetching: 3ms)причем если вместо `ao`.`location` записать константой как GeomFromText('POINT(43 55)') - все работает хорошо (это проверка для одного заказа)
952
25
Comments