Mam taką funkcję:
function n() { (SELECT id as i1, latitude as x1, longitude as y1 FROM %1$s) as t1, (SELECT id as i2, latitude as x2, longitude as y2 FROM %1$s) as t2 WHERE i1<i2 AND i1 NOT IN (SELECT id1 from %2$s WHERE id1 = i1 AND id2 = i2) LIMIT 3000',self::$tab_places,self::$tab_places_distance)); if ($n) { 'id1' => $a['i1'], 'id2' => $a['i2'], ); sql::insertArr(self::$tab_places_distance,$ar); } } }
Nie będę tłumaczył wszystkiego, osoby znające się zrozumieją na pewno (po nazwach funkcji wiadomo o co chodzi).
Chodzi o to, że w jednej tabeli mam miejscowości wraz ze współrzędnymi geograficznymi, a w drugiej odległości między miejscowościami. W ten sposób jak ja to rozwiązałem to strasznie wolno chodzi (obecnie w bazie jest ok 1000 miejscowości). Co prawda obliczam tylko raz, ew. aktualizacja w przyszłości po dodaniu nowych miejscowości, ale tak z ciekawości chciałbym was zapytać, czy widzicie jakieś lepsze rozwiązanie?
Tak jak mam w przykładzie dla LIMIT 3000 u mnie na laptopie funkcja wykonuje się ponad 15 sekund. Kiedyś to zrobiłem bardziej w php, przeleciałem całą tabelę w pętlach, ale dzięki temu sposobowi łatwiej mi jest dodawać nowe miejscowości.