2016-11-08 87 views

回答

0

我会张贴此评论,但我没有足够的声誉。

入住这句话从这样的回答:https://dba.stackexchange.com/a/133241

在SQL Server(?也许其他的RDBMS),这可以围绕 使用过滤索引工作。在SQL Server中,您可以将WHERE条件 添加到索引定义的末尾,以表示“仅将此索引应用于状态为<>'完成'的 记录。然后,使用此谓词的任何查询将最有可能使用未设置为“完成”的少量记录的索引。但是,根据文档 这里:http://www.firebirdsql.org/refdocs/langrefupd25-ddl-index.html, 它看起来不像Firebird支持过滤索引。

解决方法将“完整”记录置于ArchiveTickets表中。 创建一张具有完全相同定义(尽管没有任何自动生成ID的自动 )的表格作为您的票证表格,并通过 将“完整”记录推送到ArchiveTickets表格中,从而维护它们之间的行。 索引表上的票数将会超过更少的记录数 并且性能会更高。这可能意味着您将需要 更改任何参考“完成”票据的报告,以指向Archive表格,或者在Tickets和 ArchiveTickets之间执行UNION。这不仅具有快速的优势,而且还意味着您可以为 ArchiveTickets表创建特定索引,以使其对于其他查询的执行效果更好(对于 实例:请为我提供完成工单的平均完成时间) 这些在Tickets表上不需要。