问题标签 [partial-index]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
9146 浏览

mysql - mysql中部分索引或过滤索引的解决方法?

我正在使用 mysql 数据库。我知道 postgresql 和 SQL server 支持部分索引。就我而言,我想做这样的事情:

我想创建一个唯一的约束,但如果它是一个特定的文本,它应该允许重复。

我在mysql中找不到直接的方法来做到这一点。但是,是否有解决方法来实现它?

0 投票
0 回答
575 浏览

java - 具有条件的休眠唯一索引

我正在使用带有注释、JPA 和 postgres 数据库的 Hibernate 3.6。
我正在尝试为包含几列和一列条件的表设置索引。

SQL 应该如下所示:

我的代码如下所示:

是否有可能将 WHERE 条件纳入其中?

如果不是,我将不得不使用本机 SQL 更改索引,但我宁愿有一个带有注释的解决方案。

0 投票
2 回答
281 浏览

postgresql - 时间范围的“一对多”关系完整性问题

假设我有这样的表:

该表的目的是提供表 bar 和 baz 之间的伪“一对多”关系,但这种关系会随着时间而改变:

我们可以想象,对于表中的某一行,bar我们想在baz表中找到对应的行,但对应的行在不同的时间段可能不同——所以它现在应该返回不同的行,上个月不同等。

现在我的问题是:验证此表中数据完整性的最佳方法是什么?具体来说,我需要确定,对于某个时间戳,表中只有foo一行foo.barid. 我知道我可以写一个触发器(这似乎是我现在唯一的选择),但也许有人有一个更简单的想法?我正在考虑使用某种部分索引,但我不确定如何编写条件......

0 投票
1 回答
49 浏览

postgresql - 空值上的非选择性部分索引

我刚刚在我的数据库中发现了一个有趣的部分索引:

如您所见,它完全没有选择性,恕我直言完全没有用,还是我遗漏了什么?

0 投票
1 回答
121 浏览

sql - 优化和/或索引此查询的正确方法是什么?

我有一张表pings,里面有大约 1500 万行。我在 postgres 9.2.4 上。它具有的相关列是一个外键monitor_id、一个created_at时间戳和一个response_time表示毫秒的整数。这是确切的结构:

我想查询所有没有的响应时间NULL(90% 不会NULL,大约 10% 会NULL),具有特定的monitor_id,并且是在上个月创建的。我正在使用 ActiveRecord 进行查询,但最终结果如下所示:

这是一个非常基本的查询,但运行大约需要 2000 毫秒,这似乎相当慢。我假设索引会使它更快,但我尝试过的所有索引都不起作用,我假设这意味着我没有正确索引。

当我运行时EXPLAIN ANALYZE,这就是我得到的:

所以最后有一个索引monitor_id正在使用,但没有别的。我已经使用monitor_id,created_at和尝试了复合索引的各种排列和顺序response_time。我试过按created_at降序排列索引。我已经尝试使用response_time IS NOT NULL.

我没有尝试过使查询更快。您将如何优化和/或索引它?

0 投票
1 回答
5434 浏览

mongodb - 部分索引有什么限制?

最新版本的 MongoDB (v3.2) 增加了对部分(过滤)索引的支持。您在创建索引时提供了一个过滤器,该过滤器确定哪些文档将在索引中引用,哪些不会。

我可以使用任何过滤器表达式(只要它是有效的过滤器)?或者使用的过滤器有限制吗?如果是这样,这些限制是什么?

0 投票
1 回答
4381 浏览

database - 添加约束以使每组行的列唯一

Postgres 表中有一个列status只能取两个值:ActiveInactive

其中一列名为userid。该表可以有多个相同的行,userid但最多其中一个可以有status = 'Active'. status我只需要一个或不需要Active一个userid。如何使用此条件创建约束?我无法从 Postgres 文档中找到任何帮助。

0 投票
0 回答
924 浏览

postgresql - 在 where 子句中带有日期的 postgres 索引

我在 Postgresql 9.1 中有几百万行的大表。其中一列是带有时区的时间戳。

常用查询是使用 where 子句'column > (now()::date - 11)'查找最近十天的数据。

我想建立一个仅适用于上个月数据的索引,以限制扫描。部分索引。

到目前为止,我还没有弄清楚如何使用上个月的实际,所以我开始硬编码“2015-12-01”作为索引的开始日期。

这工作正常,索引已创建。但不幸的是,它没有被使用,因为它把 '2015-01-01' 当作一个::timestamp,而查询是一个::date. 所以没有使用索引,我回到了第一方。

接下来,我尝试修改索引以将列与日期进行比较,以便匹配。但在这里,我碰到了不可变的墙。

作为可变函数to_datecast as date它们依赖于本地时区,索引创建失败。

如果我有这样的测试表:

然后尝试创建索引

然后它失败了

这是可以理解的。但是现在,当我尝试使用特定时区时

它仍然失败

这我不明白了。它定义了时区。还有什么是不可变的?

我也尝试自己创建不可变函数:

但是在索引中使用这个函数:

失败并出现相同的错误:

我在这里不知所措。也许它与语言环境有关,而不仅仅是时区?或者其他什么使它可变?

而且 - 也许还有另一种更简单的方法,将索引限制为上一两个月的数据?Postgres 中的表分区需要重建整个数据库,到目前为止我还没有找到其他任何东西。

0 投票
1 回答
49 浏览

postgresql - Postgres如何在报价中获取列

首先,我使用的是 postgres 版本 9.4 。我正在尝试为此查询创建部分索引

我的问题是我不知道如何将列放在引号 '%'中,以便部分索引看起来像这样

将列放在单引号内的正确方法是什么?我一直在四处寻找。现在我的部分索引看起来像这样

这显然没有帮助,因为 postgres 将'city%' 和状态 ilike 'state%'视为变量而不是列。我有一个搜索框,用户在其中输入城市和州字段,所以我想优化。任何帮助,将不胜感激 ...

0 投票
0 回答
76 浏览

postgresql - PostgreSQL:部分索引的统计信息?

PostgreSQL 版本:9.3.13

考虑以下表格、索引和数据:

数据

订单:

  • (ID, 0, 1337) * 1000000 行

  • (ID, 10, 1337) * 1000 行

  • (ID, 10, 777) * 1000 行

订单_附录:

  • 每个订单一行

我的问题是:

查询计划器估计行数为 1000000,但实际行数为 1000。

在更复杂的以下查询中:

它没有使用内部连接(对于少量行更可取),而是选择位图连接 + 在 orders_appendix 上进行全表扫描,这非常慢。

如果条件是“owner=777”,它将选择首选的内部连接。

我相信这是统计数据的原因,因为 AFAIK postgres 只能独立收集和考虑每列的统计数据。

然而,如果我...

现在,一个稍微改变的查询......

将导致我想要的内部连接。


有更好的解决方案吗?也许是“部分索引统计”?