在定位的值接近表中的最大值的情况下,降序索引是否有利于SELECT..WHERE?

时间:2015-01-22 00:29:22

标签: 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)
);

将从此表中选择一行或多行的查询如下所示:

SELECT ROW_ID FROM CHILDTABLE WHERE PARENT_ID = ?

问题:

  1. 鉴于每次将此查询发送到数据库时,它都会要求PARENT_ID值(参数)接近表中值集的最大值(以及最近添加的值)为了从数据库中更快/更快地检索结果,降序索引是否优先于升序索引?

  2. 鉴于这种情况,使用降序索引而不是升序索引会对性能产生负面影响吗? (例如,如果服务器是一个降序索引而不是升序索引,那么服务器是否需要进行更多处理,以及当索引的大小增加时,索引如何影响表的插入性能?)

1 个答案:

答案 0 :(得分:2)

  

问题:

     
    

鉴于每次将此查询发送到数据库时,它都会要求PARENT_ID值(参数)接近最大值     表中的值集(以及最近添加的值)     ()),降序索引优先于升序索引     从数据库中更快/更快地检索结果的目的是什么?

  

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

似乎您的索引访问的心智模型是它使用有序列表通过从一端开始的列表后面来查找匹配的行。但是,实际上它使用了B-Tree遍历,它可以在索引中找到具有相同操作数的任何点。

  
    

鉴于这种情况,使用降序索引而不是升序索引会对性能产生负面影响吗? (例如,如果服务器是一个降序索引而不是升序索引,那么服务器是否需要进行更多处理,以及当索引的大小增加时,索引如何影响表的插入性能?)

  

我认为没有明显的区别。 DESC索引的原因是支持ORDER BY ... DESC。这是考虑索引排序的唯一原因。

参考文献: