相关疑难解决方法(0)

选择随机行PostgreSQL的最佳方法

我想在PostgreSQL中随机选择一行,我试过这个:

select * from table where random() < 0.01;
Run Code Online (Sandbox Code Playgroud)

但其他一些人推荐这个:

select * from table order by random() limit 1000;
Run Code Online (Sandbox Code Playgroud)

我有一个非常大的表,有5亿行,我希望它快.

哪种方法更好?有什么区别?选择随机行的最佳方法是什么?

sql random postgresql performance

311
推荐指数
9
解决办法
19万
查看次数

如何检查给定模式中是否存在表

Postgres 8.4及更高版本的数据库包含public模式中的模式和公司特定表中的公用表company.
company模式名称始终'company'以公司编号开头并以公司编号结束.
所以可能有以下模式:

public
company1
company2
company3
...
companynn
Run Code Online (Sandbox Code Playgroud)

应用程序始终适用于单个公司.
search_path相应指定在ODBC或连接Npgsql的字符串,如:

search_path='company3,public'
Run Code Online (Sandbox Code Playgroud)

如何检查给定表是否存在于指定的companyn模式中?

例如:

select isSpecific('company3','tablenotincompany3schema')
Run Code Online (Sandbox Code Playgroud)

应该返回false,并

select isSpecific('company3','tableincompany3schema')
Run Code Online (Sandbox Code Playgroud)

应该回来true.

在任何情况下,该函数应仅检查companyn传递的模式,而不检查其他模式.

如果两者public和传递的模式中都存在给定的表,则该函数应该返回true.
它适用于Postgres 8.4或更高版本.

sql database postgresql information-schema search-path

133
推荐指数
2
解决办法
14万
查看次数

使用LIMIT/OFFSET运行查询,并获取总行数

出于分页目的,我需要使用LIMITOFFSET子句运行查询.但是我还需要计算没有LIMITOFFSET子句的查询返回的行数.

我想跑:

SELECT * FROM table WHERE /* whatever */ ORDER BY col1 LIMIT ? OFFSET ?
Run Code Online (Sandbox Code Playgroud)

和:

SELECT COUNT(*) FROM table WHERE /* whatever */
Run Code Online (Sandbox Code Playgroud)

同时.有没有办法做到这一点,特别是让Postgres优化它的方式,这样它比单独运行更快?

sql postgresql pagination count limit

56
推荐指数
3
解决办法
3万
查看次数

如何加快PostgreSQL表中的行计数?

我们需要计算PostgreSQL表中的行数.在我们的例子中,不需要满足任何条件,如果显着提高查询速度,那么获得行估计是完全可以接受的.

基本上,我们希望select count(id) from <table>尽可能快地运行,即使这意味着没有得到确切的结果.

谢谢!任何建议将不胜感激!

sql postgresql count

34
推荐指数
5
解决办法
2万
查看次数

从分组列中重复采样的最佳性能

这个问题是关于first_value()使用其他功能或解决方法的功能.

它也是关于大表中"性能上的微不足道".使用例如.max()在下面解释的上下文中,要求虚假比较.即使速度很快,也会产生一些额外的成本.


这种典型的查询

SELECT x, y, count(*) as n 
FROM t 
GROUP BY x, y;
Run Code Online (Sandbox Code Playgroud)

需要重复所有列GROUP BY以返回多个列.执行此操作的语法糖是使用位置引用:

SELECT x, y, count(*) as n 
FROM t 
GROUP BY x, 2  -- imagine that 2, 3, etc. are repeated with x
Run Code Online (Sandbox Code Playgroud)

有时不仅需要糖,还需要一些语义来理解复杂的上下文:

SELECT x, COALESCE(y,z), count(*) as n 
FROM t 
GROUP BY x, y, z  -- y and z are not "real need" grouping clauses?
Run Code Online (Sandbox Code Playgroud)

我可以想象许多其他复杂的背景.让我们看看通常的解决方案:

SELECT x, max(y) as y, count(*) as n 
FROM t …
Run Code Online (Sandbox Code Playgroud)

sql postgresql aggregate-functions postgresql-performance

16
推荐指数
2
解决办法
297
查看次数

刷新物化视图时,索引是否也会自动刷新?

我目前正在使用Postgres 9.3.3.

如果refresh是物化视图,那个物化视图上的索引是否也重新编制索引?或者索引是否需要手动重新编制索引?

在查看以下问题时,它看起来像它但没有答案,我似乎无法找到任何支持文档.

postgresql indexing materialized-views postgresql-9.3

11
推荐指数
2
解决办法
3714
查看次数

如何估计 PostgreSQL 视图的行数?

我阅读了Postgres Wiki中的慢速计数条目。
对于我的表格来说,估计值相当准确。不过,对于观点

SELECT reltuples FROM pg_class WHERE relname = 'tbl';
Run Code Online (Sandbox Code Playgroud)

不起作用并且总是返回 0 条记录。除此之外,还有其他方法可以计算或估计 Postgres 中视图的行数吗?

SELECT COUNT(*) FROM someview; 
Run Code Online (Sandbox Code Playgroud)

ANALYZE对于视图也不起作用(对于表没有问题),我只是得到:

 ANALYZE v_myview;
 WARNING:  skipping "v_myview" --- cannot analyze non-tables or special system tables
 ANALYZE
Run Code Online (Sandbox Code Playgroud)

sql postgresql view count

5
推荐指数
1
解决办法
5635
查看次数

数据库表中的行数

我应该向数据库发送什么问题,检查我的表包含多少行?

sql postgresql

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