Answers:
听到现代数据库无法执行逆序索引扫描的消息,我会感到惊讶。
尽管理论上Firebird索引是双向的,但引擎实际上并不使用双向性,因为由于页面的写入顺序,反向方向是不可信的:当索引页面被拆分时,如果页面之间的链接与反向读取可能会读取仍指向旧索引页面而不是新添加页面的链接,从而导致其跳过索引条目。《Firebird for Database Expert》(第3集-磁盘一致性)中对此进行了解释。
因此,由于不能保证索引的双向性,因此Firebird仅按其声明的方向(升序或降序)读取索引。现在,为什么您的数据库具有所有这些索引,我假设要么数据库设计人员不知道自己在做什么,要么他假设添加这些索引将使对任何列的排序更快。
是的,当不使用降序索引用于大型表时,在大表上会有明显的性能下降(FB 2.5):
select first 1 *
from mytable
where pk_id >= 200000
order by pk_id desc
该查询用于根据主键字段“ pk_id”(整数)的值查找先前的记录。