@leijurv commented on this pull request.
> + }
+}
+
+void gen_grouped_linemerge_t::process_create()
+{
+ if (get_params().get_bool("create_indexes", true)) {
+ log_gen("Creating endpoint indexes on source table...");
+ dbexec(
+ R"(CREATE INDEX IF NOT EXISTS "{idx_startpt}" ON {src} USING
btree)"
+ R"( (ST_X(ST_StartPoint("{geom_column}")),)"
+ R"( ST_Y(ST_StartPoint("{geom_column}"))) {index_predicate})");
+ dbexec(
+ R"(CREATE INDEX IF NOT EXISTS "{idx_endpt}" ON {src} USING btree)"
+ R"( (ST_X(ST_EndPoint("{geom_column}")),)"
+ R"( ST_Y(ST_EndPoint("{geom_column}"))) {index_predicate})");
+ }
> Is it possible to put a ST_Point in a btree and get equality comparison?
Yes. I ran a quick test just now. Using the same data as this comment
https://github.com/osm2pgsql-dev/osm2pgsql/pull/2482#issuecomment-4605092533
where I expire a Z13-size area ([this
tile](https://tile.openstreetmap.org/13/1405/3271.png)) and explore 4430 total
endpoints (some of those roads extend quite far)
It's interesting that hot vs cold doesn't matter much for GiST - my
interpretation is that the btree index is more I/O-bound, while the GiST index
does more nontrivial CPU work while traversing to its goal. The speedup from
cold to warm is similar though, in total time (not relative time). So I would
suspect that the total number of disk reads is about the same between btree and
gist, it's just that gist is doing way more computations along the way.
| Variant | cold (median) | cold (min) | warm | warm per-probe (×4430 loops) |
index disk space |
|---|---|---|---|---|---|
| A — (x,y) btree | ~247 ms | 235 ms | 67 ms | 0.002 ms | 364MB |
| B — point btree | ~282 ms | 229 ms | 110 ms | 0.007 ms | 576MB |
| C — point gist | ~1070 ms | 1033 ms | 928 ms | 0.09 ms | 479MB |
I have committed
https://github.com/osm2pgsql-dev/osm2pgsql/pull/2482/changes/b0dd0994730a6b870ed7e5134b100dd808392ce6
It is an improvement to readability but a bit slower, compare to
https://github.com/osm2pgsql-dev/osm2pgsql/pull/2482#issuecomment-4605092533
| expired tile | region | walk | collect | delete | insert | total |
|---|---|---|---|---|---|---|
| z13 | 71 | 303 | 69 | 155 | 90 | **688 ms** |
| z14 | 70 | 158 | 33 | 72 | 36 | **368 ms** |
| z15 | 74 | 71 | 16 | 40 | 14 | **215 ms** |
| z16 | 73 | 73 | 8 | 32 | 12 | **197 ms** |
| z17 | 84 | 66 | 11 | 27 | 16 | **203 ms** |
| z18 | 71 | 52 | 7 | 24 | 7 | **161 ms** |
| z19 | 82 | 71 | 16 | 36 | 13 | **218 ms** |
| z20 | 71 | 59 | 6 | 29 | 7 | **172 ms** |
--
Reply to this email directly or view it on GitHub:
https://github.com/osm2pgsql-dev/osm2pgsql/pull/2482#discussion_r3365138163
You are receiving this because you are subscribed to this thread.
Message ID: <osm2pgsql-dev/osm2pgsql/pull/2482/review/[email protected]>_______________________________________________
Tile-serving mailing list
[email protected]
https://lists.openstreetmap.org/listinfo/tile-serving