小编g.d*_*d.c的帖子

使用复杂标准最小化索引读取

我正在优化工作票的 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状态的票证。

我的处理循环是:

  1. 取回第一张票在哪里 Pending
  2. 使用 Ticket 工作。
  3. 更新工单状态 => Complete
  4. 重复。

没有什么太花哨的。如果我在这个循环运行时观察数据库,我会看到每次迭代的索引读取次数增加。据我所知,性能似乎并没有严重下降,但是我正在测试的机器非常快。但是,我从我的一些用户那里收到了性能随时间下降的报告。

我在 上有一个索引Status,但它似乎仍然在Ticket_Id每次迭代时向下扫描列。好像我忽略了一些东西,但我不确定是什么。像这种预期的索引读取次数是否会不断攀升,还是索引在某些方面表现不佳?

-- 编辑评论 --

在 Firebird 中,您可以限制行检索,例如:

Select First 1
  Job_ID, Ticket_Id
From
  Tickets
Where
  Status = 'Pending'
Run Code Online (Sandbox Code Playgroud)

因此,当我说“第一”时,我只是要求它提供一个有限的记录集,其中Status = 'Pending'.

performance index firebird

12
推荐指数
1
解决办法
516
查看次数

标签 统计

firebird ×1

index ×1

performance ×1