我有几个关于在 PostgreSQL 中使用索引的问题。我有一个Friends带有以下索引的表:
Friends ( user_id1 ,user_id2)
Run Code Online (Sandbox Code Playgroud)
user_id1并且user_id2是user表的外键
这些是等价的吗?如果不是,那为什么?
Index(user_id1,user_id2) and Index(user_id2,user_id1)
Run Code Online (Sandbox Code Playgroud)如果我创建主键(user_id1,user_id2),它会自动为它创建索引吗?
如果第一个问题中的索引不相等,那么在上面的主键命令上创建了哪个索引?
我使用 AWS 作为我的云环境。我将 PostgreSQL 安装在与根实例卷相同的驱动器上。我已将第二个驱动器连接并安装到我的实例上。现在我想将我所有的 PostgreSQL 数据移动到不同的驱动器。我仍处于开发模式,因此如果此时可以更轻松地传输旧数据,我可以删除旧数据。做这个的最好方式是什么?
PostgreSQL 表空间是我应该看的东西吗?
我的问题是关于索引的使用。
我应该从一开始还是在出现性能问题时开始索引?
我们还可以在执行查询时创建临时索引。这种技术的优缺点是什么?
前几天在写一个查询时,一个想法出现在我的脑海中。
什么是可取的,首先检查是否存在唯一列的值,然后插入或插入并让 db 引发唯一约束错误?它甚至会重要吗?
编辑:正如下面在回答这个问题取决于数据库时所建议的那样,我正在添加标签 postgresql。
我无法理解 PostgreSQL 中模式的概念和用法。我不知道它如何影响我的数据库设计。我为什么要使用它?
如果我决定现在不考虑它们,以后再担心它们,这会影响我将来吗?
用一个例子解释会很好。
PostgreSQL 的 Unicode 支持如何?
如果我想保存 Unicode 数据,它在存储和检索时是否必须经过转换过程?如果是,那么这种转换的性能是什么?
如果有这样的转换,在存储简单的ASCII数据时会起作用吗?
现在这个问题来找我的情况。架构是
Table User_Read_Book
user_id | book_id
Run Code Online (Sandbox Code Playgroud)
现在我想获得阅读某些书籍的用户。假设给我读过第 1 和第 2 本书的用户。要测试的书数最多可以达到 10。
我写的第一个查询:
Select user_id from User_Read_Book Where book_id In (1,2) Group by user_id Having count(book_id) = 2
Run Code Online (Sandbox Code Playgroud)
第二个查询:
Select user_id from User_Read_Book as U join User_Read_Book as U1 On
U.user_id = U1.user_id And U1.book_id = 1 where U.book_id = 2
Run Code Online (Sandbox Code Playgroud)
正如这个答案中所说的/sf/answers/43532401/中它更喜欢在 group by 的情况下加入并让我进行第二次查询。
但我的问题是,当匹配的数字很大时,哪个查询更好。说当你必须找到读过 7 本书的用户时
Having Count(book_id) = 7
or
6 joins to the same table.
Run Code Online (Sandbox Code Playgroud)
我知道在对大型实时数据进行测试时,最好回答这个问题。专家们对此有何看法?
我进行了搜索,但没有找到有关此主题的任何讨论。在连接表上创建许多额外的列有什么优点和缺点吗?因为我们加入了 3 个表,它会影响数据检索的速度吗?
就我而言,它可能会慢一点,但这是必要的,否则我们如何保存有关多对多关系的额外数据。或者还有其他我不知道的方式吗?
我有一个应用程序,我必须在其中存储多种位置的地址。
例如,我的应用程序需要人员、酒店和活动场所的地址。
我应该为具有相同字段的不同类型的地址创建单独的表吗?或者我应该添加一个额外的字段来说明地址的类型吗?
performance ×5
postgresql ×5
index ×2
collation ×1
join ×1
primary-key ×1
schema ×1
tablespaces ×1