Ich schneide einen Punkt mit einer Reihe von Polygonen. Die Abfrage ist indiziert und die Polygone überlappen sich nicht, aber der Abfrageplan scheint zu glauben, dass anstelle von 1 Zeile 18.000 Zeilen zurückgegeben werden, was zu einem fehlerhaften Abfrageplan führt.
Insbesondere scheinen die am weitesten rechts liegenden Knoten des Abfrageplans zu glauben, dass die STPointFromText-Funktion eine Kardinalität von 1000 zurückgibt und dass der Schnittpunkt dieses mit dem Geometrieindex festgelegten Punkts 30% der 54.000 Zeilen zurückgibt. (lief 1 Million Punkte durch die Tabelle, ohne ein Gegenbeispiel zu finden, das tatsächlich mehr als eine Zeile zurückgab)
Das Ergebnis ist in dieser abgekürzten Abfrage nicht schrecklich, aber wenn ich die Ausgabe davon mit irgendetwas anderem verbinde, zwingt die Schätzung der hohen Kardinalität die vorgelagerte Tabelle dazu, eine Tabellenscan + Hashmap zu sein, obwohl die Gesamtabfrage 1 Zeile zurückgibt. Diese erweiterte Abfrage wird einige Male pro Sekunde ausgeführt, daher frage ich mich, wie ich dies optimieren kann.
Der räumliche Index ist HHHH. Für eine höchste Auflösung (über die ca. 4000 km längste Seite der Domäne) von ca. 80 x 50 m enthält der Index 56.000 Polygone mit einer erwarteten Mindestgröße von ~ 100 m.
Beachten Sie den Unterschied zwischen den est-Zeilen und den tatsächlichen.
Geschätzter Abfrageplan.
quelle