我正在优化工作票的 Firebird 2.5 数据库。它们存储在一个声明如下的表中:
CREATE TABLE TICKETS (
TICKET_ID id PRIMARY KEY,
JOB_ID id,
ACTION_ID id,
STATUS str256 DEFAULT 'Pending'
);
Run Code Online (Sandbox Code Playgroud)
我通常想找到第一张尚未处理且处于Pending
状态的票证。
我的处理循环是:
Pending
Complete
没有什么太花哨的。如果我在这个循环运行时观察数据库,我会看到每次迭代的索引读取次数增加。据我所知,性能似乎并没有严重下降,但是我正在测试的机器非常快。但是,我从我的一些用户那里收到了性能随时间下降的报告。
我在 上有一个索引Status
,但它似乎仍然在Ticket_Id
每次迭代时向下扫描列。好像我忽略了一些东西,但我不确定是什么。像这种预期的索引读取次数是否会不断攀升,还是索引在某些方面表现不佳?
-- 编辑评论 --
在 Firebird 中,您可以限制行检索,例如:
Select First 1
Job_ID, Ticket_Id
From
Tickets
Where
Status = 'Pending'
Run Code Online (Sandbox Code Playgroud)
因此,当我说“第一”时,我只是要求它提供一个有限的记录集,其中Status = 'Pending'
.