我知道索引本身的列顺序非常重要;但是,使用该索引的后续 SELECT 查询中的列顺序如何?
例如,如果我在 上有一个多列索引[:col_1, :col_2, :col_3],我的 SELECT 语句是否需要看起来像"SELECT * FROM my_table WHERE col_1 = (?), col_2 = (?), col_3 = (?)"以便优化查询?或者我可以按任何顺序指定参数并且查询优化器会处理它?
我已经阅读了一些 类似的答案,但似乎没有一个明确的答案指向文档,并相对于索引进行了回答。一些答案说“没关系”或“效果可以忽略不计”。
我正在 PostgreSQL 上使用 RoR/ActiveRecord,但问题确实适用于任何 SQL/关系数据库。
我有一个列定义如下:
data_url character varying(32768) NOT NULL
Run Code Online (Sandbox Code Playgroud)
和该列的 UNIQUE 约束:
CONSTRAINT unique_data_url UNIQUE (data_url)
Run Code Online (Sandbox Code Playgroud)
当一个大对象被插入到表中时,会出现以下错误信息:
Run Code Online (Sandbox Code Playgroud)ERROR: index row requires 32584 bytes, maximum size is 8191
如何设置 PostgreSQL 以便能够索引大于 8191 个字符的对象?空间和速度都不是问题。它是一个很少更改的表,最多有数百行。
环境:PostgreSQL 9.3.6,Fedora 20 x64
这个答案促使我再次思考我的下表,但我仍然不确定如何存储来自数据分析的变量/结果以便在后处理中快速选择。如果存储,我认为它使用部分索引(B 树)做得很好,因为在我这里描述的应用程序中只需要一个数据子集。假设您有三个标准正交表:measurement、events和headers,其中都有一些静态(以字节为单位的事件大小等)列,但想知道从数据分析中存储一些数字是否有益。
没有名称的表模式测量示例:
SERIAL | NOT NULL
INTEGER | NOT NULL
INTEGER | NOT NULL
TIMESTAMP WITH TIME ZONE | DEFAULT CURRENT_TIMESTAMP
Run Code Online (Sandbox Code Playgroud)
由于我需要统计数据,我担心通过 INTEGER 字段增加架构大小。我不想将很少使用的变量存储在主表中。我不希望我的索引没有像PostgreSQL Up & Running和这篇文章中描述的那样被使用,为什么我的索引没有被索引?
可能的来源
什么时候应该将静态/动态统计信息存储在表中?PostgreSQL 的部分索引中如何高效地存储静态/动态统计信息?
我使用带有Sequelize 的PostgreSQL作为我的 ORM。
我有一种类型,User。第二种类型是Group,它可以通过一个GroupMemberships表将任意数量的用户与其关联。Users 也可以拥有任意数量的Groups。
我的第三种类型 ,Playlist可以属于 aUser或 a group。为这种类型设计模式以便它可以拥有一种类型的所有者或两者之一的最佳方法是什么?
我的第一遍创建了两个关联,但一次只填充一个。这可能有效,但看起来很笨拙并且使查询变得困难。
附加信息
以下是我对 MDCCL 通过评论发布的澄清请求的回应:
(1)如果一个播放列表是由给定资集团,可以说,这个播放列表是关系到一个一对多的用户,只要他们是会员这样的小组,对不对?
我相信这在技术上是正确的,但这种一对多关联并不明确存在。
(2) 那么,一个特定的播放列表是否有可能同时被一对多的群组拥有?
不, a 应该不可能被Playlist一对多拥有Groups。
(3) 特定播放列表是否可能由一对多组拥有,同时由不是该组成员的一对多用户拥有?
不,因为如 (2) 中的一对多 from PlaylisttoGroup不应该存在。此外,如果 aPlaylist …
看起来对于单个用户,我应该创建一个登录角色而不是相应的组角色,因为我无法直接为登录角色分配权限。这是真的吗?这种分离的目的是什么?
此外,据我所知,只能使用login role进行身份验证。那么组角色中密码字段的目的是什么?或者可以作为组角色进行身份验证?那么为什么有人需要登录角色呢?
看起来我也可以在 pg_hba 中设置登录和组角色。
Linux 上的 PostgreSQL 9.6,tags_tmp表大小~ 30 GB(1000 万行),tags是一个text[]并且只有 6 个值。
tags_tmp(id int, tags text[], maker_date timestamp, value text)
Run Code Online (Sandbox Code Playgroud)
tags_tmp(id int, tags text[], maker_date timestamp, value text)
Run Code Online (Sandbox Code Playgroud)
我需要使用 filter ontags和order byon检索数据maker_date desc。我可以在两tags & maker_date desc列上创建索引吗?
如果没有,你能提出其他想法吗?
select id, tags, maker_date, value
from tags_tmp
where tags && array['a','b']
order by maker_date desc
limit 5 offset 0
Run Code Online (Sandbox Code Playgroud)
SQL 代码:
create index idx1 on tags_tmp using gin (tags);
create …Run Code Online (Sandbox Code Playgroud) postgresql performance order-by index-tuning postgresql-performance
我需要一个基于指定字符串搜索记录的建议。
搜索字符串可以包含来自这些列的值。此字符串中的值不必以正确的顺序严格相同,并且此字符串中某些列的值可能会丢失。
搜索字符串示例:
22 Karntner Wien
Run Code Online (Sandbox Code Playgroud)
例如,我得到了前 5 条类似记录的结果。
我想我应该使用全文搜索,但我没有使用它的经验。你能告诉我如何进行吗?
由于配置选项设置错误,我发现自己处于 pg_xlog 包含 60GB 数据的情况。
我设置的wal_level,archive_mode=on并archive_command用于然后得到卸载的酒保。我可以根据默认的 postgresql.conf 配置文件简单地注释这些选项并删除 pg_xlog 目录中的文件吗?
删除这些文件以避免数据库损坏的正确步骤是什么?
我pg_dump在 PostgreSQL 8.3 服务器中托管的 JIRA 数据库上做了一个。数据库后的尺寸vacuum full为217132652(大约207 MB)。
然后我使用以下命令在 PostgreSQL 9.4 服务器上恢复了 JIRA 数据库:
$ psql -X -v ON_ERROR_STOP=1 -d jira2 -U jira -h localhost < jiradb2017_03_12.sql
Run Code Online (Sandbox Code Playgroud)
我假设自从我使用 以来,任何错误都会退出恢复ON_ERROR_STOP=1,但 SQL 脚本正确完成(尽管有一些与数据恢复无关的警告)。
我最终得到了一个大小为158019348(大约 151 MB)的数据库。
那么,这里有什么故事呢?我是否可以假设数据库已成功恢复并且 PostgreSQL 优化了其存储(介于 8.3 和 9.4 版本之间)引擎并且更有效地使用了空间?
我在不同的机器上有一个带有应用程序服务器和数据库的敏感应用程序,在从数据库的情况下,在不同的数据中心。
尽管我相信我的 postgresqls 被配置为始终使用 ssl,但我需要一种方法来仔细检查这一点。
是否有一些简单的方法可以检查所有客户端连接是否确实被迫使用 ssl?
postgresql ×10
index ×2
index-tuning ×2
performance ×2
disk-space ×1
optimization ×1
order-by ×1
restore ×1
schema ×1
security ×1
select ×1
size ×1
ssl ×1
statistics ×1
subtypes ×1
varchar ×1