2016-11-08 91 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表上不需要。