Indexing 降序索引是否有利于SELECT..当所定位的值接近表中的最大值时,在何处?

Indexing 降序索引是否有利于SELECT..当所定位的值接近表中的最大值时,在何处?,indexing,firebird,Indexing,Firebird,使用:Firebird 2.5.3 这是我无法从(当前)Firebird文档中确定的关于表索引的内容 表结构如下所示: CREATE TABLE CHILDTABLE ( ROW_ID INTEGER NOT NULL, PARENT_ID INTEGER NOT NULL, CONSTRAINT PK_CHILDTABLE PRIMARY KEY (ROW_ID) ); 将从此表中

使用:Firebird 2.5.3

这是我无法从(当前)Firebird文档中确定的关于表索引的内容

表结构如下所示:

CREATE TABLE CHILDTABLE 
(
  ROW_ID                  INTEGER         NOT NULL,
  PARENT_ID                 INTEGER         NOT NULL,
 CONSTRAINT PK_CHILDTABLE  PRIMARY KEY (ROW_ID)
);
将从此表中选择一行或多行的查询如下所示:

SELECT ROW_ID FROM CHILDTABLE WHERE PARENT_ID = ?
问题:

  • 假设每次将此查询发送到数据库时,它都会要求一个父ID值(参数),该值接近表中(以及最近添加的行中)的最大值,那么降序索引是否会优于升序索引,为了更快地从数据库检索结果

  • 在这种情况下,使用降序索引而不是升序索引是否会对性能产生负面影响?(例如,如果插入的每一行是降序索引而不是升序索引,服务器是否需要对其进行更多处理,以及随着表的大小增加,索引将如何影响表的插入性能?)

  • 问题:

    假设每次将此查询发送到数据库时,它都会请求一个接近最大值的PARENT_ID值(参数) 表中的一组值(以及最近添加的 例如,降序索引是否优于升序索引 从数据库中更快地检索结果的目的是什么

    否。索引由两个数据结构组成:一个有序列表(在Firebird中实现为单链表)和一个搜索树(实现为B树)

    看起来,索引访问的心智模型是,它使用有序列表查找匹配行,只从列表的一端开始。然而,事实上,它使用了一个B-树遍历,它可以用相同的操作数找到索引中的任何位置

    在这种情况下,使用降序索引而不是升序索引是否会对性能产生负面影响?(例如,如果插入的每一行是降序索引而不是升序索引,服务器是否需要对其进行更多处理,以及随着表的大小增加,索引将如何影响表的插入性能?)

    我认为没有任何明显的区别。
    DESC
    索引的原因是支持
    orderby。。。描述
    。这是考虑索引排序的唯一理由

    参考资料:


    • 请注意,Firebird是此处所述规则的一个例外:在Firebird中,索引顺序必须始终与
      order BY
      子句完全匹配

    次要挑剔:Firebird中的索引是双重链接的,但反向链接被认为不可靠,因此不能用于反向数据扫描,请参阅@MarkRotteveel,谢谢。我想事实上是一样的:)是的。希望他们将来能找到一种方法来改变这一点(尽管这可能会给索引结构中使用的前缀压缩带来一系列新的问题)