sql >> Databáze >  >> RDS >> Mysql

Pomalý dotaz na výsledky vyhledávání založený na poloze

Můžete použít prostorové rozšíření mysql a uložit zeměpisnou šířku a délku jako datový typ bodu a vytvořit z něj prostorový index. Tímto způsobem můžete změnit pořadí souřadnic podél křivky a zmenšit rozměr a zachovat prostorové informace. Prostorový index můžete použít jako ohraničovací rámeček k filtrování dotazu a poté pomocí vzorce harvesine vybrat optimální výsledek. Váš ohraničující rámeček by měl být větší než poloměr velkého kruhu. Mysql používá rtree s nějakým prostorovým indexem a můj příklad byl o křivce z nebo hilbertově křivce:https://softwareengineering.stackexchange.com/questions/113256/what-is-the-difference-between-btree-and-rtree-indexing .Pak můžete vložit geosouřadnici přímo do bodového sloupce:http://dev.mysql.com/doc/refman/5.0/en/creating-spatial-values.html . Nebo můžete použít datový typ geometrie:http:// markmaunder.com/2009/10/10/mysql-gis-extensions-quick-start/ . Pak můžete použít funkci MBRcontains takto: http://dev.mysql.com/doc/refman/4.1/en/relations-on-geometry-mbr.html nebo jakékoli jiné funkce:http://dev.mysql.com/doc/refman/5.5/en/functions-for-testing-spatial-relations-between-geometric-objects.html . Proto potřebujete ohraničovací rámeček. Zde je několik příkladů:

Zde je jednoduchý příklad s datovým typem bodu:

    CREATE SPATIAL INDEX sx_place_location ON place (location)

    SELECT  * FROM    mytable
    WHERE   MBRContains
           (
           LineString
                   (
                   Point($x - $radius, $y - $radius),
                   Point($x + $radius, $y + $radius)
                   )
           location
           )
    AND Distance(Point($x, $y), location) <= $radius

Nejsem si jistý, jestli to funguje, protože používá proměnnou poloměru s funkcí ohraničujícího rámečku. Zdá se mi, že MBRwithin je o něco jednodušší, protože nepotřebuje žádný argument:Mysql:Optimalizace hledání superuzlu ve stromu vnořených sad .



  1. Jak stránkovat výsledky dotazu pro Infinite Scroll?

  2. Jak vrátit pouze datum z datového typu SQL Server DateTime

  3. Jak mohu vidět příkazový řetězec při použití parametrů MySqlCommand?

  4. mysql - vrátí první sloupec jednou a všechna odpovídající data sloupce