使用复杂条件最小化索引读取
我正在优化工作票的Firebird 2.5数据库。它们存储在这样声明的表中: CREATE TABLE TICKETS ( TICKET_ID id PRIMARY KEY, JOB_ID id, ACTION_ID id, STATUS str256 DEFAULT 'Pending' ); 我通常想查找尚未处理的第一张票证并且处于Pending状态。 我的处理循环将是: 取回第一张票 Pending 使用票务。 更新故障单状态=> Complete 重复。 没什么好看的。如果在此循环运行时正在观察数据库,则可以看到每次迭代的索引读取次数都在增加。据我所知,性能似乎并没有显着下降,但是我正在测试的机器很快。但是,我从一些用户那里收到了性能随时间下降的报告。 我在上有一个索引Status,但看起来仍然像它在Ticket_Id每次迭代时向下扫描列。似乎我正在忽略某些内容,但是我不确定是什么。是这种预期的索引读取数目攀升,还是索引行为异常? -编辑评论- 在Firebird中,您可以限制行检索,例如: Select First 1 Job_ID, Ticket_Id From Tickets Where Status = 'Pending' 因此,当我说“第一”时,我只是在询问它在哪里的有限记录集Status = 'Pending'。