问题标签 [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.
mysql - mysql中部分索引或过滤索引的解决方法?
我正在使用 mysql 数据库。我知道 postgresql 和 SQL server 支持部分索引。就我而言,我想做这样的事情:
我想创建一个唯一的约束,但如果它是一个特定的文本,它应该允许重复。
我在mysql中找不到直接的方法来做到这一点。但是,是否有解决方法来实现它?
java - 具有条件的休眠唯一索引
我正在使用带有注释、JPA 和 postgres 数据库的 Hibernate 3.6。
我正在尝试为包含几列和一列条件的表设置索引。
SQL 应该如下所示:
我的代码如下所示:
是否有可能将 WHERE 条件纳入其中?
如果不是,我将不得不使用本机 SQL 更改索引,但我宁愿有一个带有注释的解决方案。
postgresql - 时间范围的“一对多”关系完整性问题
假设我有这样的表:
该表的目的是提供表 bar 和 baz 之间的伪“一对多”关系,但这种关系会随着时间而改变:
我们可以想象,对于表中的某一行,bar
我们想在baz
表中找到对应的行,但对应的行在不同的时间段可能不同——所以它现在应该返回不同的行,上个月不同等。
现在我的问题是:验证此表中数据完整性的最佳方法是什么?具体来说,我需要确定,对于某个时间戳,表中只有foo
一行foo.barid
. 我知道我可以写一个触发器(这似乎是我现在唯一的选择),但也许有人有一个更简单的想法?我正在考虑使用某种部分索引,但我不确定如何编写条件......
postgresql - 空值上的非选择性部分索引
我刚刚在我的数据库中发现了一个有趣的部分索引:
如您所见,它完全没有选择性,恕我直言完全没有用,还是我遗漏了什么?
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
.
我没有尝试过使查询更快。您将如何优化和/或索引它?
mongodb - 部分索引有什么限制?
最新版本的 MongoDB (v3.2) 增加了对部分(过滤)索引的支持。您在创建索引时提供了一个过滤器,该过滤器确定哪些文档将在索引中引用,哪些不会。
我可以使用任何过滤器表达式(只要它是有效的过滤器)?或者使用的过滤器有限制吗?如果是这样,这些限制是什么?
database - 添加约束以使每组行的列唯一
Postgres 表中有一个列status
只能取两个值:Active
和Inactive
。
其中一列名为userid
。该表可以有多个相同的行,userid
但最多其中一个可以有status = 'Active'
. status
我只需要一个或不需要Active
一个userid
。如何使用此条件创建约束?我无法从 Postgres 文档中找到任何帮助。
postgresql - 在 where 子句中带有日期的 postgres 索引
我在 Postgresql 9.1 中有几百万行的大表。其中一列是带有时区的时间戳。
常用查询是使用 where 子句'column > (now()::date - 11)'
查找最近十天的数据。
我想建立一个仅适用于上个月数据的索引,以限制扫描。部分索引。
到目前为止,我还没有弄清楚如何使用上个月的实际,所以我开始硬编码“2015-12-01”作为索引的开始日期。
这工作正常,索引已创建。但不幸的是,它没有被使用,因为它把 '2015-01-01' 当作一个::timestamp
,而查询是一个::date
. 所以没有使用索引,我回到了第一方。
接下来,我尝试修改索引以将列与日期进行比较,以便匹配。但在这里,我碰到了不可变的墙。
作为可变函数to_date
,cast as date
它们依赖于本地时区,索引创建失败。
如果我有这样的测试表:
然后尝试创建索引
然后它失败了
这是可以理解的。但是现在,当我尝试使用特定时区时
它仍然失败
这我不明白了。它定义了时区。还有什么是不可变的?
我也尝试自己创建不可变函数:
但是在索引中使用这个函数:
失败并出现相同的错误:
我在这里不知所措。也许它与语言环境有关,而不仅仅是时区?或者其他什么使它可变?
而且 - 也许还有另一种更简单的方法,将索引限制为上一两个月的数据?Postgres 中的表分区需要重建整个数据库,到目前为止我还没有找到其他任何东西。
postgresql - Postgres如何在报价中获取列
首先,我使用的是 postgres 版本 9.4 。我正在尝试为此查询创建部分索引
我的问题是我不知道如何将列放在引号 '%'中,以便部分索引看起来像这样
将列放在单引号内的正确方法是什么?我一直在四处寻找。现在我的部分索引看起来像这样
这显然没有帮助,因为 postgres 将'city%' 和状态 ilike 'state%'视为变量而不是列。我有一个搜索框,用户在其中输入城市和州字段,所以我想优化。任何帮助,将不胜感激 ...
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 只能独立收集和考虑每列的统计数据。
然而,如果我...
现在,一个稍微改变的查询......
将导致我想要的内部连接。
有更好的解决方案吗?也许是“部分索引统计”?