gpt4 book ai didi

sql - libpq 对于大型(2000 万条记录)数据库来说非常慢

转载 作者:行者123 更新时间:2023-11-29 14:23:40 25 4
gpt4 key购买 nike

我是 SQL/RDBMS 的新手。

我有一个应用程序,它使用 libpq 库在 PostgreSQL 服务器中添加 10 列的行。现在,我的服务器与我的 Visual C++ 应用程序在同一台机器上运行。

我添加了大约 15-20 百万条记录。使用 select count(*) from <tableName>; 获取总计数的简单查询需要 4-5 分钟.

我已经用输入数据的时间(时间码)为我的表编制了索引。大多数时候我需要用不同的 WHERE 来计数/AND添加了条款。

有没有办法让事情变得更快?我需要让它尽可能快,因为一旦服务器移动到网络,事情就会变得更慢。

谢谢

最佳答案

我认为网络延迟不会成为影响查询时间的重要因素。所有处理都在 PostgreSQL 服务器上完成。

PostgreSQL MVCC 设计意味着表中的每一行 - 不仅仅是索引 - 都必须遍历以计算 count(*),这是一项昂贵的操作。在您的情况下,涉及很多行。

这里有一个很好的关于这个主题的 wiki 页面 http://wiki.postgresql.org/wiki/Slow_Counting与建议。

这个链接有两个建议,一个是使用索引列:

select count(index-col) from ...;

...虽然这只在某些情况下有效。

如果您有多个索引,请使用以下方法查看哪个索引的成本最低:

EXPLAIN ANALYZE select count(index-col) from ...;

如果您可以接受近似值,另一种方法是使用 Postgres 特定函数来获取近似值,例如:

select reltuples from pg_class where relname='mytable';

这个近似值的好坏取决于设置 autovacuum 运行的频率以及许多其他因素;看评论。

关于sql - libpq 对于大型(2000 万条记录)数据库来说非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11700801/

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