gpt4 book ai didi

c++ - 在PostgreSQL中根据其ID选择很多行的最快方法?

转载 作者:行者123 更新时间:2023-12-02 10:29:54 27 4
gpt4 key购买 nike

我正在使用带有libpqxx的postgres,并且有一张表,我们将简化为

data_table
{
bytea id PRIMARY KEY,
BigInt size
}
如果我在cpp中有一组ID,例如 std::unordered_set<ObjectId> Ids,那么从data_table中获取ID和Size参数的最佳方法是什么?
到目前为止,我已经使用了准备好的声明: constexpr char* preparedStatement = "SELECT size FROM data_table WHERE id = $1";然后在事务中,我为集合中的每个条目调用了一条准备好的语句,并检索了集合中每个条目的结果,
pqxx::work transaction(SomeExistingPqxxConnection);
std::unordered_map<ObjectId, uint32_t> result;
for (const auto& id : Ids)
{
auto transactionResult = transaction.exec_prepared(preparedStatement, ToPqxxBinaryString(id));
result.emplace(id, transactionResult[0][0].as<uint32_t>());
}
return result;
因为集合可以包含数以万计的对象,而表可以包含数以百万计的对象,所以这可能需要花费很多时间来处理,而且我认为这不是对postgres的特别有效的使用。
我是SQL的新手,所以我真的不知道我在做什么是解决此问题的正确方法,还是这是一种更有效的方法。
E:值得的是,ObjectId类基本上是std::array 的类型包装器,也就是256位加密哈希。

最佳答案

id是主键,因此已被索引,因此我首先要考虑的是查询建立时间。例如,存储过程是预编译的。第二种方法是将您的集合放在临时表中,可能也将其键入id上,以便可以在一个选择中将两个表/索引连接在一起。索引的排序应该是有序的,就像树而不是哈希一样,以便可以合并它们。

关于c++ - 在PostgreSQL中根据其ID选择很多行的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62668439/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com