postgreql 9.5 postgis 2.2在窗口。我首先创建一个表:
CREATE TABLE points (
id SERIAL,
ad CHAR(40),
name VARCHAR(200)
);
然后,添加一个几何字段geom:
select addgeometrycolumn('points', 'geom', 4326, 'POINT', 2);
并在上面创建gist索引:
CREATE INDEX points_index_geom ON points USING GIST (geom);
然后,我将大约1,000,000点插入表中。
我想查询距离给定点在给定距离内的所有点。这是我的sql代码:
SELECT st_astext(geom) as location FROM points
WHERE st_distance_sphere(
st_geomfromtext('POINT(121.33 31.55)', 4326),
geom) < 6000;
结果就是我想要的,但是太慢了。当我对这段代码explain analyze verbose
时,我发现它没有使用points\u index\u geom(explain显示seq scan和no index)。
所以我想知道为什么它不使用索引,我应该如何改进?
您不能期望ST_Distance_Sphere()
在此查询中使用索引。您正在对geom字段的内容进行计算,然后对计算结果进行比较。在这种情况下,数据库可能不会使用索引,除非您有一个与查询中的计算几乎相同的函数索引。
正确的方法来寻找位置与在一个给定的距离从某一点是使用ST_DWithin
ST_DWithin-如果几何在指定的距离内,则返回true。对于几何单位是空间参考的单位,对于地理单位是米,测量默认为use_spheroid=true(围绕球体测量),为了更快地检查,use_spheroid=false沿球体测量。
和
此函数调用将自动包括边界框比较,该比较将使用几何图形上可用的任何索引。
问题内容: 我有2张表,如下所示: 当我解释查询时: postgres给我这个: 过了一会儿给我这个完全相同的查询(仍然不使用索引): 我的问题是:如果我仅按构成唯一索引的st值和类型值进行过滤,为什么不使用此唯一索引? 问题答案: 您的表没有足够的行来使用索引。它们适合放在单个磁盘页面中,因此使用cpu时间读取整个内容并筛选出行要比两次执行同一操作(一次用于索引,另一次用于数据)要快。
我正在试验微服务和前端之间的角色映射(在Keycloak术语中是keycloak-clients)。 假设我有两个keycloak客户端: 路由管理-API 路由管理-WebApp 你对这种做法有什么看法?是正确的思维方式吗?我们需要王国角色做什么?
我有一个带有索引的ISODate()类型字段的数据库(我也用字符串字段尝试了这个实验——结果相同)。我使用的是MongoDB(4. x)的开源版本,当我进行查询/排序以查找最大_finish_time时,除非我指定提示,否则不会使用索引。 我的问题是: 这解释为: 扫描整个收藏。当我为可用索引指定提示时,如: 我得到了查询计划: 它使用索引。我不想在查询中添加hint(),我对它为什么拒绝使用索引
我使用MVC页面中的Kendo DatePicker值构建了一个模型: 但是,如果我输入值,而不是单击日历并选择日期,它在这里不会得到值。我怎样才能得到这个数据?
根据digitalocean教程,我用我的ELK节点作为RedHat服务器设置了ELK stack和filebeat。Kibana已启动并运行,但当我将索引模式配置为logstash-*时,我看不到任何logstash索引: 当我做卷曲以查看我的索引时,它们只是filebeat索引。Filebeat应该将数据推送到正在监听5044的logstash 您可以看到我只有filebeat索引。我检查了我
我正在尝试更新名为的数据库中名为的表。该表的主键是。 当我运行以下语句时: 我收到一个错误,上面写着“您正在使用安全更新模式,并且您试图更新一个没有使用键列的WHERE的表。” 我在谷歌上搜索了那个错误消息,大多数回复都是“你必须使用子句或关闭安全模式”。但正如您所看到的,我使用的是子句。如果我有子句,为什么会出现错误? MySQL服务器版本5.6。20