相关疑难解决方法(0)

使用单个SQL相关子查询来获取两列

我的问题由以下查询表示:

SELECT 
  b.row_id, b.x, b.y, b.something,
  (SELECT a.x FROM my_table a WHERE a.row_id = (b.row_id - 1), a.something != 42 ) AS source_x,
  (SELECT a.y FROM my_table a WHERE a.row_id = (b.row_id - 1), a.something != 42 ) AS source_y
FROM 
  my_table b
Run Code Online (Sandbox Code Playgroud)

我使用相同的子查询语句两次,以获得两者source_xsource_y.这就是为什么我想知道是否可以只使用一个子查询来做到这一点?

因为一旦我对我的真实数据(数百万行)运行此查询,它似乎永远不会完成并花费数小时,如果不是几天(我的连接在结束前挂起).

我正在使用PostgreSQL 8.4

sql postgresql indexing performance correlated-subquery

6
推荐指数
2
解决办法
5960
查看次数

如何在数据库中存储年份?

是否有标准方法在数据库中存储年份和月份?我需要根据几个月和几年做一些报告.

我不能使用日期和函数来实时提取几个月,因为表格很大,所以我需要预处理.

database postgresql

6
推荐指数
2
解决办法
3342
查看次数

同一个表的同一列上的2个PostgreSQL索引 - 冗余?

我有一个带有2个索引的PostgreSQL表.其中一个索引是覆盖website_idtweet_id列,是一个独特的B树索引.第二个索引仅覆盖website_id列,并且是非唯一索引.

如果第一个索引存在,第二个索引是多余的吗?换句话说,拥有第二个指数是否没有优势?

sql database postgresql indexing

6
推荐指数
2
解决办法
1110
查看次数

如何处理相互递归的插入

我有一个定义相互递归表的模型:

Answer
  questionId QuestionId
  text

Question
  text
  correct AnswerId
Run Code Online (Sandbox Code Playgroud)

实际插入问题需要做什么?我需要先知道正确答案是什么.但要插入答案,我需要知道它回答了什么问题.

如果重要的话,我正在运行Postgres.

DDL是:

CREATE TABLE answer (
  id integer NOT NULL,                -- answer id
  text character varying NOT NULL,    -- answer text
  question_id bigint NOT NULL         -- question id
);

CREATE TABLE question (
  id integer NOT NULL,                 -- question id
  question character varying NOT NULL, -- question text
  correct bigint NOT NULL,             -- correct answer
  solution character varying NOT NULL  -- solution text
);

ALTER TABLE ONLY answer ALTER COLUMN …
Run Code Online (Sandbox Code Playgroud)

sql postgresql database-design referential-integrity foreign-keys

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

PostgreSQL:额外列的性能影响

给定一个大表(1000万到1亿行),添加一些额外(未编入索引)的列的最佳方法是什么?

  1. 只需添加列.
  2. 为每个额外列创建一个单独的表,并在要访问额外值时使用联接.

答案的变化取决于额外的列是密集的(大多数不是空的)还是稀疏的(大多数是空的)?

sql database postgresql performance

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

生产中缓慢的PostgreSQL查询 - 帮助我理解这个解释分析输出

我有一个查询需要9分钟才能在x86_64-unknown-linux-gnu上运行PostgreSQL 9.0.0,由GCC gcc(GCC)4.1.2 20080704(Red Hat 4.1.2-46)编译,64位

这个查询由为我的应用程序自动生成.它试图找到一所学校的所有"教师成员".成员资格是在组中具有角色的用户.有几种类型的团体,但重要的是学校和服务.如果有人是服务中的教师和该学校的成员(15499),那么他们就是我们正在寻找的.

这个查询过去在生产中运行良好,但在开发中运行良好,但在生产中,它现在需要几分钟才能运行.你能帮我理解为什么吗?

这是查询:

select distinct user1_.ID as ID14_, user1_.FIRST_NAME as FIRST2_14_, user1_.LAST_NAME as LAST3_14_, user1_.STREET_1 as STREET4_14_, user1_.STREET_2 as STREET5_14_, user1_.CITY as CITY14_, user1_.us_state_id as us7_14_, user1_.REGION as REGION14_, user1_.country_id as country9_14_, user1_.postal_code as postal10_14_, user1_.USER_NAME as USER11_14_, user1_.PASSWORD as PASSWORD14_, user1_.PROFESSION as PROFESSION14_, user1_.PHONE as PHONE14_, user1_.URL as URL14_, user1_.bio as bio14_, user1_.LAST_LOGIN as LAST17_14_, user1_.STATUS as STATUS14_, user1_.birthdate as birthdate14_, user1_.ageInYears as ageInYears14_, user1_.deleted as deleted14_, user1_.CREATEDATE as CREATEDATE14_, user1_.audit …
Run Code Online (Sandbox Code Playgroud)

sql postgresql indexing hibernate postgresql-9.0

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

估计 Postgres 索引的大小

我试图更好地了解创建 Postgres 索引所涉及的权衡。作为其中的一部分,我很想了解通常使用多少空间索引。我已经通读了文档,但找不到任何关于此的信息。我一直在做我自己的小实验来创建表和索引,但是如果有人能解释为什么大小是这样的,那就太棒了。假设一个像这样有 1M 行的公共表,其中每一行都有一个唯一的id和唯一的outstanding.

CREATE TABLE account (
    id integer,
    active boolean NOT NULL,
    outstanding double precision NOT NULL,
);
Run Code Online (Sandbox Code Playgroud)

以及由创建的索引

  • CREATE INDEX id_idx ON account(id)
  • CREATE INDEX outstanding_idx ON account(outstanding)
  • CREATE INDEX id_outstanding_idx ON account(id, outstanding)
  • CREATE INDEX active_idx ON account(active)
  • CREATE INDEX partial_id_idx ON account(id) WHERE active

你估计索引大小是多少字节,更重要的是,为什么?

postgresql indexing storage

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

aws postgresql 中对于包含 40 亿行的表的查询性能非常慢

问题

我们有一个存储用户活动的关系表。像下面这样的查询需要77 秒!

FROM "site_activity"
WHERE
    (
        NOT "site_activity"."is_deleted"
        AND "site_activity"."user_id" = 68812389
        AND NOT (
            "site_activity"."kind" IN (
                'updated',
                'duplicated',
                'reapplied'
            )
        )
        AND NOT (
            "site_activity"."content_type_id" = 14
            AND "site_activity"."kind" = 'created'
        )
    )
ORDER BY
    "site_activity"."created_at" DESC,
    "site_activity"."id" DESC
LIMIT  9;
Run Code Online (Sandbox Code Playgroud)

查询计划如下所示

                                     QUERY PLAN
--------------------------------------------------------------------------------------------
Limit
    (cost=17750.72..27225.75 rows=9 width=16)
    (actual time=199501.336..199501.338 rows=9 loops=1)
  Output: id, created_at
  Buffers: shared hit=4502362 read=693523 written=37273
  I/O Timings: read=190288.205 write=446.870
  ->  Incremental Sort
      (cost=17750.72..2003433582.97 rows=1902974 width=16)
      (actual time=199501.335..199501.336 rows=9 loops=1)
        Output: …
Run Code Online (Sandbox Code Playgroud)

sql database postgresql amazon-web-services amazon-rds

4
推荐指数
2
解决办法
634
查看次数

在Postgres字符串数组上创建不区分大小写的索引

varchar[]在Postgres 9.2中使用了一个列(varchar数组)来存储一些标签.在按标记检索行时,我希望查询不区分大小写.但是,我想保留在UI中显示的大小写(因此我不能只将小部件存储为小写).

所以,我的问题是如何在varchar数组中在Postgres中创建一个不区分大小写的索引?一种可能的方法是在列上创建功能性GIN索引.怎么做到这一点?还有其他方法吗?

postgresql database-indexes postgresql-9.2

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

PostgreSQL表中的列顺序是否重要?

例如,我有表用户(id,用户名,电子邮件).

以下查询之间有什么区别吗?(也许是表演,或其他任何事情)

SELECT id, username, email FROM users
Run Code Online (Sandbox Code Playgroud)

SELECT id, email, username FROM users
Run Code Online (Sandbox Code Playgroud)

通常,列顺序是否影响创建PostgreSQL表?

postgresql

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