我在三个本地主机 DS 系统(PostgreSQL、SQL Server 和 MySQL)中有相同的名为 BulkContainers 的空间表,其中包含相同的行。我有疑问
SELECT *
FROM BulkContainers
WHERE ST_Contains('POLYGON((14.438948 50.084217, 14.449664 50.093414, 14.311912 50.038895, 14.283814 50.154423, 14.438948 50.084217))', geodata) IS TRUE;
在 PostgreSQL 中大约需要 0.7 秒。当我想在 SQL Server 中执行相同的查询
SELECT *
FROM BulkContainers
WHERE geometry::STGeomFromText('POLYGON((14.438948 50.084217, 14.449664 50.093414, 14.311912 50.038895, 14.283814 50.154423, 14.438948 50.084217))', 4326).MakeValid().STContains(geodata.MakeValid()) = 1;
在 MySQL 中
SELECT * FROM BulkContainers
WHERE ST_Contains(ST_GeomFromText('POLYGON((14.438948 50.084217, 14.449664 50.093414, 14.311912 50.038895, 14.283814 50.154423, 14.438948 50.084217))'), geodata) = 1;
大约需要4秒,太长了。任何人都可以帮助我为什么差异如此之大?或者如何提高这两个DS的性能?非常感谢!
我尝试使用一些索引,但没有帮助。