【发布时间】:2023-04-01 20:30:02
【问题描述】:
我有一个数据库,其中有 100 万多行。 该数据库由(为了这个问题)2列组成; user_id 和用户名。 这些值不受我的应用程序控制;我并不总是确定这些是当前的正确值。我所知道的是 user_id 保证是唯一的。我得到定期更新,允许我更新我的数据库,以确保我有一个“最终一致”的 user_id/username 映射版本。
我希望能够检索某个用户名的最新添加; “较旧”的结果应该被忽略。
我相信这里有两种可能的方法:
- 索引:应该有一个username:row(哈希图?)的索引,其中username始终是最后添加的用户名;所以在每一行添加或更新时都会更新。
- 将用户名设置为唯一,并执行on conflict update 将旧行设置为空字符串,将新行设置为用户名
根据我对索引的了解,这听起来像是更快的选择(并且不需要我检查数据库中 100 万行的唯一性)。我还听说 hashmap 很痛苦,因为它们需要重建,所以请随时提出其他想法。
我当前的实现对整个数据库进行了全面搜索,在超过 100 万行时开始变得非常慢。它当前获取此添加字符串的“最后一个”值;在这一点上,我什至不确定这是一个有效的假设。
给定一个示例数据库:
user_id, username
3 , bob
2 , alice
4 , joe
1 , bob
我希望搜索 `username = bob` 会返回 (1, bob)。
我不能依靠 ID 排序来解决这个问题,因为没有将 ID 分配给哪个用户名的线性关系。
【问题讨论】:
-
。 .表代表无序集。除非您提供包含此信息的列,否则无法获取广告订单。
标签: sql postgresql indexing