2

我不知道我想要找出的正确词语,因此很难用谷歌搜索。

我想知道它是否可以使用数据库(独立于技术,但有兴趣了解它是否可以使用 Oracle、MySQL 和 Postgres)指向特定行而不是再次执行我的查询。

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

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

那么我一直试图在谷歌中使用的神奇术语是什么?

干杯

4

4 回答 4

3

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

在这里查看更多信息:http ://www.orafaq.com/wiki/ROWID 。

顺便说一句,您害怕的“索引带来的速度下降”只有在您执行的插入和更新多于读取时才有意义。索引只会加快读取速度,因此如果读取率很高,您可能不会遇到问题,索引可能是您的最佳解决方案。

于 2010-04-11T20:07:59.937 回答
3

我当前的大多数表都没有索引,我不希望索引有时会降低速度。

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

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

于 2010-04-11T20:38:58.733 回答
2

一般来说,处理这类需求的最好方法是使用主键(或者实际上是任何方便、紧凑的唯一标识符)作为“指针”,并依靠索引查找来快速 - 它通常是.

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

您应该在(几乎)所有表上至少有一个索引 - 该索引将用于主键。例外情况可能是一个很小的表,它很容易放入内存中并且不会被更新,并且将被使用到不会被从内存中逐出。那么索引可能会分散注意力;但是,此类表通常很少更新,因此索引不会损害任何内容,如果索引没有帮助(也可能没有),优化器将忽略它。

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

于 2010-04-11T21:18:32.090 回答
0

您可能还对游标感兴趣。(请注意,索引辩论对游标仍然有效。)

维基百科定义在这里。

于 2010-04-12T21:16:37.043 回答