我正在尝试在Firebird中创建过滤索引,但我找不到它。有可能吗?
我指的是使用表中一部分行的索引。它存在于MS SQL Server中。
答案 0 :(得分:1)
不,Firebird没有过滤(或部分)索引。 Firebird跟踪器中有一张改进票:http://tracker.firebirdsql.org/browse/CORE-3384,但尚未计划用于版本。
答案 1 :(得分:0)
我会将此作为评论发布,但我没有足够的声誉。
从以下答案中查看此引用:https://dba.stackexchange.com/a/133241
在SQL Server(以及其他RDBMS?)中,可以解决这个问题 使用过滤的索引。在SQL Server中,您将添加WHERE条件 在索引定义的末尾,说"仅应用此索引 具有状态<>的记录'完成' &#34 ;.然后任何查询使用此 谓词很可能会使用少量的索引 记录未设置为'完成'。但是,基于文档 在这里:http://www.firebirdsql.org/refdocs/langrefupd25-ddl-index.html, 它看起来不像Firebird支持过滤索引。
解决方法是要完成'完成' ArchiveTickets表中的记录。 创建一个具有完全相同定义的表(尽管没有任何自动 生成ID)作为您的Tickets表并在它们之间维护行 推动完成'记录到ArchiveTickets表。索引 然后,您的票证表将覆盖更少的记录 而且性能要高得多。这可能意味着你需要 更改任何引用'完成'门票指向 存档表或跨两个票证执行UNION ArchiveTickets。这样做的好处是不仅速度快, 但也意味着你可以为。创建特定的索引 ArchiveTickets表使其更好地执行其他查询(for 实例:给我完整门票的平均完成时间) 门票表上不需要这些。