在过去的几周里,我一直在对旧的 Firebird 数据库发火。由于各种原因,这个数据库很糟糕,但我注意到的一件事是每个表的每个字段都有两个索引;每一个都有一个片段,一个按顺序,一个按顺序。asc
desc
除了为每个表中的每个字段都有一个索引的重要性之外,它让我思考 - 单段索引有两个具有相同索引段但一个 indesc
一个 in 的索引有什么优势asc
吗?有什么可以得到的,或者现代 DBMS 是否会简单地使用asc
索引并从头开始并在需要时向后工作?
虽然 Firebird 索引理论上是双向的,但引擎实际上并没有使用双向性,因为反向是不可信的,因为页面的写入顺序:当一个索引页面被拆分时,页面之间的链接被重写,如果这与反向读取它可能会读取仍然指向旧索引页面而不是新添加页面的链接,导致它跳过索引条目。这在Firebird for the Database Expert: Episode 3 - On Disk Consistency 中有解释。
因此,由于不能保证索引的双向性,Firebird 只在其声明的方向(升序或降序)读取索引。现在至于为什么您的数据库具有所有这些索引,我假设要么设计数据库的人不知道他在做什么,要么他假设添加这些索引将使对任何列的排序更快。
归档时间: |
|
查看次数: |
2366 次 |
最近记录: |