小编lau*_*ent的帖子

如何使用 Postgres 处理短 UUID?

我发现许多 Web 服务(我想到的是 Stripe)对其 UUID 使用特殊的编码。它们将使用特殊的字母表(通常是小写、大写字母和数字)进行编码,而不是a44521d0-0fb8-4ade-8002-3385545c3318通常的编码,这会产生类似mhvXdrZT4jP5T8vBxuvm75. 两者都表示相同的 UUID,但编码不同。

我想知道这些服务如何处理这些 ID?特别是 Postgres 是否可以在数据库中直接使用这种短 ID 编码?(换句话说,任何选择或插入都将使用短 ID)

或者将这些短 ID 直接作为文本保存在数据库中是否有意义?

我找不到关于此的太多信息,所以我不确定这里的最佳实践是什么。

postgresql encoding uuid

4
推荐指数
1
解决办法
6330
查看次数

为什么使用 UNION 的 SQL 查询比不使用 UNION 的相同查询要快得多?

我正在尝试优化一个查询,该查询在 Postgres 12.7 上从未完成。需要几个小时甚至几天的时间才能使 CPU 达到 100%,并且永远不会返回:

SELECT "id", "counter", "item_id", "item_name", "type", "updated_time"
FROM "changes"
WHERE (type = 1 OR type = 3) AND user_id = 'kJ6GYJNPM4wdDY5dUV1b8PqDRJj6RRgW'
OR type = 2 AND item_id IN (SELECT item_id FROM user_items WHERE user_id = 'kJ6GYJNPM4wdDY5dUV1b8PqDRJj6RRgW')
ORDER BY "counter" ASC LIMIT 100;
Run Code Online (Sandbox Code Playgroud)

我随机尝试使用 UNION 重写它,我相信它是等效的。基本上查询中有两部分,一部分用于 type = 1 或 3,另一部分用于 type = 2。

(
    SELECT "id", "counter", "item_id", "item_name", "type", "updated_time"
    FROM "changes"
    WHERE (type = 1 OR type = 3) AND user_id …
Run Code Online (Sandbox Code Playgroud)

postgresql union postgresql-12 postgresql-performance ugly-or

3
推荐指数
1
解决办法
3658
查看次数