数据库行/记录指针

时间:2010-04-11 20:05:18

标签: database oracle postgresql indexing information-retrieval

我不知道我正在努力寻找的正确用语,因此很难用谷歌搜索。

我想知道它是否可能与数据库(技术无关,但有兴趣听到它是否可能与Oracle,MySQL和Postgres一起)指向特定行而不是再次执行我的查询。

所以我可能最初执行一个查询找到一些感兴趣的行,然后希望避免通过一个指针列表或一些其他元数据再次搜索它们,这些元数据指示数据库上的位置我可以直接去下一个我想要那些结果。

我意识到数据库上有缓存,但我想把这些“指针”放在其他地方,因此缓存最终不能解决这个问题。这只是一个索引,我存储索引并通过它查找?我当前的大部分表都没有索引,我不希望速度降低,有时会带有索引。

那么我一直试图将这个术语放入谷歌这个神奇的术语吗?

干杯

4 个答案:

答案 0 :(得分:3)

在Oracle中,它被称为ROWID。它标识该块中的文件,块编号和行号。我不能说你所描述的是一个好主意,但这至少可以让你开始寻找正确的方向。

点击此处了解详情:http://www.orafaq.com/wiki/ROWID

顺便说一句,如果您执行的插入和更新比读取更多,那么您担心的“索引附带的速度降低”才有意义。索引只会加快读取速度,因此如果读取比率很高,则可能没有问题,索引可能是您的最佳解决方案。

答案 1 :(得分:3)

  

我当前的大多数表都没有   索引,我不想要速度   有时伴随着减少   索引。

而且你也不想通常附带索引的速度增加,但是你想要手动滚动一个定制的伪缓存?

我不是在这里嗤之以鼻,这是一个严肃的观点。数据库设计人员在优化产品方面投入了大量的技能和精力。学习如何利用他们的努力而不是重新实现一些核心功能,这不是更明智吗?

答案 2 :(得分:2)

通常,处理这种要求的最佳方法是使用主键(或实际上任何方便的,紧凑的唯一标识符)作为“指针”,并依赖索引查找快速 - 它通常会。

您可以在比DB更多的DBMS中使用ROWID,但通常不建议出于各种原因。如果你屈服于“每个表都有一个自动增量列”数据库设计学校,那么你可以将自动增量列值记录为标识符。

您(几乎)所有表上应至少有一个索引 - 该索引将用于主键。例外情况可能是表格很小,以至于它很容易适应内存并且不会更新,并且会被充分利用而不能从内存中逐出。然后索引可能会分散注意力;但是,这些表通常很少更新,因此索引不会损害任何内容,如果索引没有帮助(优点可能没有),优化器将忽略它。

您可能还有辅助索引。在大多数活动正在读取数据的系统中,您可能希望错误地拥有更多索引而不是更少,因为访问时间是最关键的。如果您的系统是更新密集型的,那么您将使用更少的索引,因为在添加,删除或更新数据时更新索引会产生相关成本。显然,您需要设计索引以便与用户实际执行的查询(或您的应用程序执行)一起使用。

答案 3 :(得分:0)

您可能也对cursors感兴趣。 (请注意,索引争论仍然适用于游标。)

Wikipedia definition此处。