相关疑难解决方法(0)

复合索引是否也适用于第一个字段的查询?

假设我有一个包含字段A和的表B。我在A+上进行常规查询B,所以我在 上创建了一个复合索引(A,B)A复合索引是否也会对查询进行全面优化?

此外,我在 上创建了一个索引A,但 Postgres 仍然只使用复合索引来查询A。如果前面的答案是肯定的,我想这并不重要,但是为什么它默认选择复合索引,如果单个A索引可用?

postgresql performance index database-design index-tuning

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

如何操作 PostgreSQL 优化器的连接顺序?

我正在研究表连接顺序优化。

在查询处理时,我想获取优化器生成的表连接顺序,并在 PostgreSQL 中使用我自己的算法更新它?

如何在查询处理时更新表连接顺序?

postgresql join optimization

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

我们可以在第一次执行 PL/pgSQL 函数时执行最佳计划而不是通用计划吗?

我有一个非常繁忙的功能,我需要以最佳方式优化。此函数只是一个嵌套的 select 语句,遗留应用程序每秒请求数次。

索引已就位,但我注意到它仅在第一次执行函数后使用。我认为问题在于 Postgres 创建了一个通用的执行计划,因为它在大多数情况下是高度排他的,但有时可能没有那么好。

当我EXPLAIN ANALYZE在第一次执行后进行测试时,查询运行得非常快,但应用程序会话仅调用该函数一次,然后终止。我需要第一次执行使用实际的优化计划。任何人都可以帮忙吗?

我们尝试弄乱管理连接池的连接器驱动程序来发出一个DISCARD TEMP而不是DISCARD ALL,因此它可以保持会话的缓存计划并且性能达到顶峰,但我不想在生产环境中这样做.

我们使用的是在 CentOS 6 上运行的 Postgres 9.4。我试过作为 SQL 函数运行,但没有帮助,它实际上作为 plpgsql 函数更快。下面是函数代码:

CREATE OR REPLACE FUNCTION public.ap_keepalive_geteqpid_veiid(
    IN tcbserie bigint,
    IN protocolo integer)
  RETURNS TABLE(eqpid integer, veiid integer, tcbid integer, veiplaca character varying, veiproprietariocliid integer, tcbtppid integer, tcbversao character, veirpmparametro double precision, tcbconfiguracao bigint, tcbevtconfig integer, veibitsalertas integer, sluid integer, harid integer) AS
$BODY$
BEGIN
    RETURN QUERY
    SELECT  teqp.eqpID, 
            teqp.eqpveiID AS veiID, 
            tcb.tcbID, 
            tvei.veiPlaca, 
            tvei.veiProprietariocliID, …
Run Code Online (Sandbox Code Playgroud)

postgresql performance hints plpgsql postgresql-9.4 postgresql-performance

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

使用数组列的内部连接

无法O (log n)及时索引和执行查询。

该查询包括一个INNER JOIN、一个ORDER BY和一个相等运算。如果我正确理解了数据库的规律,O (log n)如果一个非等式运算符没有在多于一列上使用,则可以及时(或大约)索引和执行查询。在这种情况下,我相信INNER JOIN确实算作相等运算符,而非相等运算符将是ORDER BY查询的一部分。该表有超过 10,000,000 行,需要每秒处理多次读取和写入。

使用 PostgreSQL。这就是桌子的样子。如您所见,“Names”列是一个列表属性,它是与之相反的列INNER JOIN

Age Names                       Date
34  ['carla', 'john', 'sam']    3/13/2011
26  ['json', 'cindy', 'joel']   3/13/2011
72  ['beth', 'amber', 'susie']  3/13/2011
14  ['john', 'jim', 'debie']    3/13/2011
Run Code Online (Sandbox Code Playgroud)

这是我们尝试执行的查询:

SELECT * FROM the_table WHERE Age==26 AND Names=='john' ORDER BY Date
Run Code Online (Sandbox Code Playgroud)

我的背景来自使用 App Engine 的 Big Table,所以我在这里使用了相等运算符来指示它'john'应该是Names列中的名称之一。这将是 GAE 大表中可接受的查询,它将O (log N)及时执行,因为所有大表查询都需要执行。我假设在 …

postgresql performance index gin-index query-performance

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