小编Kap*_*pil的帖子

子查询中的公用表表达式

我请求帮助理解来自Oracle,DB2,Sybase的所有RDBMS在子查询中支持公共表表达式(CTE).我知道PostgreSQL会这样做,而MS SQL Server却没有.

SELECT a.*, b.* 
 FROM (WHERE aa as (
          <<select_query>),
          SELECT * 
            FROM aa
           WHERE <<criteria>>
    ) as a
    LEFT JOIN (
        WITH bb as (
            <<select_query>
        ),
        select * from bb inner join tbl_c on <<innerjoin>> where <<criteria>>
    ) as b
    on <<join_expr>>
Run Code Online (Sandbox Code Playgroud)

我无法在子查询之外定义with子句 - 两个查询都是根据列,条件,安全性等动态生成的.此外,上述查询本身可以在另一个查询中用作子查询.总之,原理是动态生成的视图,以后可以重用.一些查询也可能将多达10-12个这样的动态视图合并在一起.问题是应用程序应该与数据库无关,至少就PG,Oracle和DB2而言,并且根本没有实现一个不支持的功能.

oracle db2 postgresql sybase common-table-expression

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

PostgreSQL表在内存中

我创建了一个包含总共3个表的数据库,用于特定目的.所有表的总大小约为850 MB - 非常精简...其中一个表包含大约800 MB(包括索引)的数据和500万条记录(每天添加大约6000条记录).

该系统是PG-Windows,带有8 GB RAM Windows 7笔记本电脑和SSD.我分配了2048MB作为shared_buffers,256MB作为temp_buffers,128MB作为work_mem.我对单个表执行多次单个查询 - 希望表保留在RAM中(因此上面的参数).但是,虽然我看到执行期间内存使用量激增(大约200 MB),但我没有看到内存消耗至少保持在500 MB(数据保留在内存中).运行的所有postgres exe在任务管理器中显示2-6 MB大小.因此,我怀疑LRU不会将数据保存在内存中.

平均查询执行时间大约是2秒(非常简单的单表查询)...但我需要将其降低到大约10-20毫秒甚至更小(如果可能的话),纯粹因为有太多次,同样的要执行并且只能通过将内容保存在内存中来实现.有什么建议?

此致,卡皮尔

memory postgresql

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