如何在 PostgreSQL 上复制 SQL Server 索引 INCLUDE 和 STATISTICS 功能?

Ver*_* D. 4 postgresql index sql-server statistics

我正在做一个必须支持两个数据库引擎的项目;SQL Server 和 PostgreSQL。

我们使用 NHibernate 作为 ORM。

我们遇到了某些查询的性能问题。使用 SQL Server 工具,我们提出了几个新的索引和统计数据,大大提高了 SQL Server 的性能。但是,我不确定如何在 PostgreSQL 上实现相同的索引和统计信息。

两个例子是:

    CREATE STATISTICS [perfStat_Answer_02] ON [dbo].[Answer] 
    ([InclusionExpressionGroupId], [QuestionId], [AnswerId])

    CREATE NONCLUSTERED INDEX [perf_Answer_01] ON [dbo].[Answer] 
    (
        [QuestionId] ASC
    )
    INCLUDE ( 
            [AnswerId],
            [InclusionExpressionGroupId],
            [AnswerConceptId],
            [Revision],
            [AnswerText],
            [AnswerOrder]
    )
    WITH (
            SORT_IN_TEMPDB = OFF
            , IGNORE_DUP_KEY = OFF 
            , DROP_EXISTING = OFF
            , ONLINE = OFF)
    ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

INCLUDE如果存在这样的功能,PostgreSQL 中 d 字段的语法是什么?

我们如何添加统计信息?

阅读 PostgreSQL 文档,我不相信两者都受支持。但是,我想知道是否有任何方法可以完成类似的事情。

a_h*_*ame 7

我不知道有什么CREATE STATISTICS作用,但是优化器的统计信息是在运行ANALZYE时使用命令收集的autovacuum- 默认情况下是打开的。

始终为所有列收集统计信息,无需专门打开它。

您可以使用 控制在每列的基础上为统计信息收集的详细信息级别ALTER TABLE ... ALTER COLUMN column SET STATISTICS integer

PostgreSQL 中的索引始终是非聚集的,因此我假设上述索引映射到QuestionId列上的常规索引。

不确定INCLUDE部分。如果优化器选择了该索引,我认为这是支持仅索引检索。由于 PostgreSQL 还没有仅索引检索,因此没有等效的技术。